我尝试使用带有type = best_fields的multi_match来获取数组中最佳字段的得分,但我得到数组中项目的总和得分。如何创建请求,只获取数组项的最大分数并忽略其他项目分数?
文件:
1: { "field": ["a b c", "b c"] }
2: { "field": ["e f g", "b c"] }
查询:
{
"query": {
"multi_match": {
"query": "c",
"fields": [
"field"
],
"type": "best_fields"
}
}
}
结果:
1: {"score": 0.39, "highlight": ["a b <em>c</em>", "b <em>c</em>"] }
2: {"score": 0.28, "highlight": ["b <em>c</em>"]}
映射:
{
"mappings": {
"bft": {
"_all": {
"enabled": false
},
"properties": {
"field": {
"type": "text"
}
}
}
}
答案 0 :(得分:0)
我不相信你实际上可以做你在这里要求的事情。问题归结为评分算法如何处理字符串数组与单个值的对比。
在看到你的问题之后我做了一些挖掘这个问题,我能够在这个主题上找到的信息似乎意味着[&#34; ab c&#34;,&#34; b c&#34 ;]相当于[&#34; abcb c&#34;]或&#34; abcb c&#34;当谈到得分时。
当您从Elasticsearch获取文档时,任何数组都将在 与索引文档时的顺序相同。 _source字段 你得到的包含与你完全相同的JSON文档 索引。
但是,数组是可索引的可搜索的 - 作为多值字段, 这是无序的。在搜索时,您不能参考“第一个 元素“或”最后一个元素。“而是将数组视为一个包 值。 Reference
为了实现您想要的目标,我相信您需要将您的各个数组值分解到自己的文档中,并提供另一个可用作过滤器的字段,以便&#34; group&#34;你的文件。