次のドキュメント セット:
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 をスコア計算に使用したいと考えています。これは可能ですか?