1

次のドキュメント セット:

curl -XPUT "http://localhost:9200/test/books/1" -d '{
  "title": "Bacon Dishes",
  "tags": ["bacon", "cooking"]
}'

curl -XPUT "http://localhost:9200/test/books/2" -d '{
  "title": "Beyond Bacon",
  "tags" : ["cooking"]
}'

そして、次のクエリ:

curl -XGET "http://localhost:9200/test/books/_search?pretty=true&search_type=dfs_query_then_fetch" -d ' {
  "explain" : true,
  "query" : {
    "multi_match" : {
      "query" : "bacon beyond",
      "fields" : ["title^2","tags^1"]
    }
  }
}'

説明計画は、タイトルのスコアが を使用idf(docFreq=2, maxDocs=2)して計算され、タグ (存在する場合) のスコアが を使用して計算されることを示していidf(docFreq=1, maxDocs=2)ます。

これは (少なくとも私たちにとって) 100 冊の本があり、50 冊の本がタイトルに「ベーコン」を含み、1 冊だけがタグに「ベーコン」を含み、タイトルに「ベーコン」を含まない場合に問題になります。上記のクエリを使用すると、タグに "bacon" を含むドキュメントは、タイトルがブーストされているにもかかわらず、スコアが高くなります。

最初の例のタグ フィールドとタイトル フィールドの両方のスコア計算を次のようにしたいと思います。

 idf(docFreq=2, maxDocs=2)

つまり、マルチマッチ クエリのすべてのフィールドで用語の docFreq をスコア計算に使用したいと考えています。これは可能ですか?

4

1 に答える 1