Elasticsearch:如何知道结果排序的字段?

aka*_*kai 5 elasticsearch elasticsearch-5

在Elasticsearch中,有没有办法检查结果排序的字段?我想要类似于内部命中的排序条款.

想象一下,您的文档有这种形式:

{"numerals" : [  // nested
    {"key": "point", "value": 30},
    {"key": "points", "value": 200},
    {"key": "score", "value": 20},
    {"key": "scores", "value": 40}
  ]
}
Run Code Online (Sandbox Code Playgroud)

并按以下方式对结果进行排序:

{"numerals.value": {
  "nested_path": "numerals",
  "nested_filter": {
    "match": {
      "numerals.key": "score"}}}}
Run Code Online (Sandbox Code Playgroud)

现在我不知道如何知道结果实际排序的字段:它可能scores在本文档中,但可能score在其他文档中?有两个问题 - 1.您不能使用内部命中或突出显示嵌套字段. - 2.即使你可以,如果有多个匹配的候选人,它也无法解决问题.

Kar*_* R. 3

问题是关于按嵌套对象内的字段进行排序。

这就是文档 https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-sorting.htmlhttps://www.elastic.co/guide/en/elasticsearch/reference/的内容current/search-request-sort.html#_nested_sorting_example 说:

Elasticsearch 将首先通过“nested_filter”查询来限制嵌套文档,然后以与多值字段相同的方式进行排序:正是这样,就好像只有过滤后的嵌套文档作为内部对象,又好像有仅具有多值字段的根文档,该字段包含属于已过滤嵌套对象的所有值
(在您的示例中,仅保留一个值:20)。如果您想确定排序顺序,请插入“mode”参数:“min”、“max”、“sum”、“avg”或“median”

如果您没有根据相应问题指定“mode”参数,则将为“asc”选择最小值,为“desc”顺序选择最大值:

默认情况下,对多值字段进行排序时,将根据排序顺序从字段值中选取最低或最高值。