使用以下文档集:
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。这可能吗?