# Multi Matchクエリでのフレーズ検索について（2-gram、同義語検索）

**URL:** <https://discuss.elastic.co/t/multi-match-2-gram/94553>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [July 26, 2017, 1:28am UTC](https://discuss.elastic.co/t/multi-match-2-gram/94553 "2017-07-26T01:28:35Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![A.S](https://avatars.discourse-cdn.com/v4/letter/a/b9e5f3/32.png) [@A.S](https://discuss.elastic.co/u/A.S)\
**Post date:** [July 26, 2017, 1:28am UTC](https://discuss.elastic.co/t/multi-match-2-gram/94553/1 "2017-07-26T01:28:35Z")

</div>

お世話になっております。  
Multi Matchクエリで2-gramの同義語検索、かつフレーズ検索をしたいのですが、  
同義語展開後、フレーズ検索をすることができません。  
どなたか解決策をご存じでしょうか。

１．アナライザー設定

```auto
{
  "analysis": {
    "filter": {
      "synonym": {
        "type": "synonym",
        "synonyms_path": "Analyzer\\synonym.txt"
      },
      "bigram_filter": {
        "type": "ngram",
        "min_gram": "2",
        "max_gram": "2"
      },
      "pos_filter": {
        "type": "kuromoji_part_of_speech",
        "stoptags": ["記号", "記号-一般", "記号-読点", "記号-句点", "記号-空白", "記号-括弧開", "記号-括弧閉"]
      },
      "normalize": {
        "name": "nfkc",
        "type": "icu_normalizer"
      }
    },
    "char_filter": {
      "whitespace_remove": {
        "pattern": "\\s{1,}",
        "type": "pattern_replace",
        "replacement": ""
      },
      "map": {
        "type": "mapping",
        "mappings_path": "Analyzer\\mapping.txt"
      },
      "zenkakuspace_remove": {
        "pattern": " ",
        "type": "pattern_replace",
        "replacement": ""
      },
      "normalize": {
        "mode": "compose",
        "name": "nfkc",
        "type": "icu_normalizer"
      }
    },
    "analyzer": {
      "jp_search_bigram": {
        "filter": ["pos_filter", "synonym", "normalize", "bigram_filter"],
        "char_filter": ["map", "normalize", "whitespace_remove", "zenkakuspace_remove"],
        "type": "custom",
        "tokenizer": "whitespace_tokenizer"
      },
      "jp_bigram": {
        "filter": ["pos_filter", "normalize"],
        "char_filter": ["map", "normalize", "whitespace_remove", "zenkakuspace_remove"],
        "type": "custom",
        "tokenizer": "jp_bigram_tokenizer"
      }
    },
    "tokenizer": {
      "jp_bigram_tokenizer": {
        "type": "ngram",
        "min_gram": "2",
        "max_gram": "2"
      },
      "whitespace_tokenizer": { "type": "whitespace" }
    }
  }

```

２．検索クエリ

```auto
GET index1/_search
{
  "from": 0,
  "size": 100,
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "type": "phrase",
            "query": "建て替え",
            "analyzer": "jp_search_bigram",
            "fields": [
              "Field1",
              "Field2"
            ]
          }
        }
      ]
    }
  }
}

```

フィルターでなく、トークナイザーで2-gramにすればフレーズ検索できるのですが、  
その場合、同義語展開ができないため質問させていただきました。  
よろしくお願いいたします。

---

<div class="post-metadata">

**Author:** ![johtani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/johtani/32/44956_2.png) [@johtani](https://discuss.elastic.co/u/johtani)\
**Post date:** [August 5, 2017, 6:07am UTC](https://discuss.elastic.co/t/multi-match-2-gram/94553/2 "2017-08-05T06:07:06Z")

</div>

synonym filterの設定でsynonymを読み込む時点で、デフォルトだとwhitespaceのtokenizerが指定されるので、n-gramと異なるトークナイズになってしまうので、synonymが展開されていないのだと思います。  
[tokenizer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html)というパラメータがあるので、そこにjp\_bigram\_tokenizerを指定するのが良いかと。

あと、関係ないですが、`jp_bigram`の`pos_filter`は必要ないので削除するのが良いかと。`pos_filter`は`kuromoji_tokenizer`が出力した情報を使用するためです。

---

<div class="post-metadata">

**Author:** ![A.S](https://avatars.discourse-cdn.com/v4/letter/a/b9e5f3/32.png) [@A.S](https://discuss.elastic.co/u/A.S)\
**Post date:** [August 9, 2017, 2:23am UTC](https://discuss.elastic.co/t/multi-match-2-gram/94553/3 "2017-08-09T02:23:43Z")

</div>

ご回答ありがとうございます。  
synonym filterにtokenizerパラメータがあることを見逃しておりました。  
ご指摘いただいた通りに修正し、正しくsynonymが展開されることを確認いたしました。  
また、pos\_filterも削除いたします。ありがとうございました。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [September 6, 2017, 2:24am UTC](https://discuss.elastic.co/t/multi-match-2-gram/94553/4 "2017-09-06T02:24:06Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
