如何根据折叠项的数量对elasticsearch结果进行排序?

时间:2019-03-17 11:36:57

标签: elasticsearch search elastic-stack

我正在使用带有折叠的查询,以便在某个人下面收集一些文档,但是我希望根据搜索找到匹配项的文档数对结果进行排序。这是我的查询:< / p>

GET documents/_search
{
  "_source": {
    "includes": [
      "text"
    ]
  },
  "query": {
    "query_string": {
      "fields": [
        "text"
      ],
      "query": "some text"
    }
  },
  "collapse": {
    "field": "person_id",
    "inner_hits": {
      "name": "top_mathing_docs",
      "_source": {
        "includes": [
          "doc_year",
          "text"
        ]
      }
    }
  }

}

有什么建议吗?

谢谢

1 个答案:

答案 0 :(得分:1)

如果我的理解正确,那么您需要根据 inner_hits 的计数对文档进行排序(即父文档)基于inner_hits的{​​{1}}中的。

因此,结果中的父文档person_id无关紧要。

我发现可行的唯一方法是利用Top Hits Aggregation for Field Collapse Example,下面是查询的样子。

汇总查询字段折叠示例:

_score

请注意,我假设POST <your_index_name>/_search { "size":0, "query": { "query_string": { "fields": [ "text" ], "query": "some text" } }, "aggs": { "top_person_ids": { "terms": { "field": "person_id" }, "aggs": { "top_tags_hits": { "top_hits": { "size": 10 } } } } } } 的类型为person_id或任何keyword。 另外,如果您仔细查看查询,我也提到了numeric。这意味着我只返回聚合的结果。

另一个要注意的是,以上汇总与您在问题中发布的Field Collapse in Search Request功能无关。只是使用这种聚合,您的结果可以用类似的方式格式化。

让我知道这是否有帮助!