在 Elasticsearch 中限制每个文档类型的结果

Limit results per document type in Elasticsearch

我正在使用 Elasticsearch(版本 2.3)在具有多种文档类型的索引中进行搜索。 我想将结果数限制为每种文档类型的前 X 次搜索命中。如何实现?

查询非常简单明了:

{
  "sort": [
    {
      "_type": {
        "order": "asc"
      }
    }
  ],
  "query": {
    "query_string": {
      "query": "[some search query here]"
    }
  }
}

我在 找到了答案,但似乎自版本 1.4.0 以来语法可能发生了变化,因为我只收到以下错误消息:

"reason": {
    "type": "search_parse_exception",
    "reason": "Found two aggregation type definitions in [types]: [terms] and [hits]",
    "line": 1,
    "col": 44
}

我会在 type 元字段上使用 terms 聚合,然后使用 top_hits 子聚合,如下所示:

{
  "size": 0,
  "aggs": {
    "types": {
      "terms": {
        "field": "_type"
      },
      "aggs": {
        "topten": {
          "top_hits": {
            "size": 10
          }
        }
      }
    }
  }
}