在Elasticsearch中,有没有办法检查结果排序的字段?我想要类似于内部命中的排序条款。
想象一下,您的文档有这种形式:
{"numerals" : [ // nested
{"key": "point", "value": 30},
{"key": "points", "value": 200},
{"key": "score", "value": 20},
{"key": "scores", "value": 40}
]
}
并按以下方式对结果进行排序:
{"numerals.value": {
"nested_path": "numerals",
"nested_filter": {
"match": {
"numerals.key": "score"}}}}
现在我不知道如何知道结果实际排序的字段:在本文档中它可能是scores
,但在其他文档中可能是score
?有两个问题 - 1.您不能使用内部命中或突出显示嵌套字段。 - 2.即使你可以,如果有多个匹配的候选人,它也无法解决问题。
答案 0 :(得分:3)
问题是关于嵌套对象内的字段排序。
所以这就是文件 https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-sorting.html 和 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html#_nested_sorting_example 表示:
Elasticsearch将首先通过“nested_filter”-query限制嵌套文档,然后按照与多值字段相同的方式进行排序: 正好就像只有过滤后的嵌套文档作为内部对象的方式一样,就好像只有一个多值字段的根文档,其中包含属于已过滤嵌套对象的所有值 (在你的例子中,只剩下一个值:20)。 如果要确定排序顺序,请插入“mode”参数: “min”,“max”,“sum”,“avg”或“median”
如果你没有根据corresponding issue指定“mode”参数,将为“asc”选择最小值,并选择“desc”-order的最大值:
默认情况下,在多值字段上排序最低或最高 将根据排序从字段值中选择值 顺序。