web-dev-qa-db-ja.com

Fuzzinessを使用した複数のフィールドに対するElasticSearchmulti_matchクエリ

Multi_matchクエリにあいまいさを追加するにはどうすればよいですか?したがって、誰かが「野球」を検索する場合でも、「野球」の記事が見つかります。現在、私のクエリは次のようになっています。

POST /newspaper/articles/_search
{
    "query": {
        "function_score": {
            "query": {
                "multi_match": {
                    "query": "baseball",
                    "type": "phrase",
                    "fields": [
                        "subject^3", 
                        "section^2.5", 
                        "article^2", 
                        "tags^1.5",
                        "notes^1"
                    ]
                }
            }
        }
    }
}

私が見ていた1つのオプションは、このようなことをすることです。これが最良のオプションかどうかはわかりません。スコアに基づいて並べ替えを維持することが重要です。

   "query" : { 
      "query_string" : { 
         "query" : "subject:basball^3 section:basball^2.5 article:basball^2", 
         "fuzzy_prefix_length" : 1 
      } 
   } 

提案?

12
Funtriaco Prado

マルチクエリにあいまいさを追加するには、ここで説明するようにあいまいさプロパティを追加する必要があります。

{
    "query": {
        "function_score": {
            "query": {
                "multi_match": {
                    "query": "baseball",
                    "type": "phrase",
                    "fields": [
                        "subject^3", 
                        "section^2.5", 
                        "article^2", 
                        "tags^1.5",
                        "notes^1"
                    ],
                    "fuzziness" : "AUTO",
                    "prefix_length" : 2

                }
            }
        }
    }
}

prefix_lengthがドキュメントで次のように説明されていることに注意してください。

「ファジー化」されない最初の文字の数。これは、調査する必要のある用語の数を減らすのに役立ちます。デフォルトは0です。

fuzzinessの可能な値を確認するには、 ES docs にアクセスしてください。

29
nan-ead