4

我有以下查询

$queryDefinition = [
        'query' => [
            'bool' => [
                'must' => [
                    [
                        'query_string' => [
                            'default_field' => '_all',
                            'query' => $term
                        ]
                    ]
                ],
                'must_not' => [],
                'should' => []
            ],
        ],
        //'filter' => [
        //    'limit' => ['value' => 3],
        //],
        'from' => 0,
        'size' => 50,
        'sort' => [],
        'facets' => [
            'types' => [
                    'terms' => ['field' => '_type']
                ]
            ]
    ];

在索引中,我们有 5 种类型,我只想显示每种类型的 3 个结果,用于自动完成。当我设置过滤器限制时,仅过滤第一种类型的结果,对于其他类型,我得到所有结果。

我怎样才能做到这一点?

谢谢

4

1 回答 1

0
{
  "aggregations": {
    "types": {
      "terms": {
        "field": "_type"
      },
      "hits": {
        "top_hits": {
          "size": 3
        }
      }
    }
  }
}

如果您使用的是 ElasticSearch 1.4.0,则可以在“_type”字段上使用术语聚合并将热门点击聚合用作子聚合并将其大小设置为 3(在您的情况下)。

希望有帮助。

于 2014-12-31T10:48:42.060 回答