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

时间:2017-06-11 06:21:09

标签: elasticsearch elasticsearch-5

在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.即使你可以,如果有多个匹配的候选人,它也无法解决问题。

1 个答案:

答案 0 :(得分: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”-query限制嵌套文档,然后按照与多值字段相同的方式进行排序: 正好就像只有过滤后的嵌套文档作为内部对象的方式一样,就好像只有一个多值字段的根文档,其中包含属于已过滤嵌套对象的所有值 (在你的例子中,只剩下一个值:20)。 如果要确定排序顺序,请插入“mode”参数: “min”,“max”,“sum”,“avg”或“median”

如果你没有根据corresponding issue指定“mode”参数,将为“asc”选择最小值,并选择“desc”-order的最大值:

  

默认情况下,在多值字段上排序最低或最高   将根据排序从字段值中选择值   顺序。