弹性搜索返回唯一值

elasticsearch returning unique values

我有一个名为 'category' 的字段。

我可以 return 可能的类别列表,只需这样做:

$searchParams['body']['aggs']['category']['terms']['field'] = 'category'; 

但我想在该字段内搜索,并且 return 只搜索与我的查询匹配的类别。

示例列表:

  1. 披萨
  2. 苹果派
  3. 橘子派
  4. 纸杯蛋糕
  5. 汉堡

我想搜索 "pie" 并得到以下结果:

  1. 苹果派
  2. 橘子派

有200多个类别。我想以 elasticsearch 的方式执行此操作,而不是使用 MySQL 作为搜索。

感谢大家的帮助:)

聚合在 "scope" of the query 中运行。因此,如果您对 "pie" 执行搜索查询,聚合将只会看到(并聚合)"pie" 个文档。

$query = [
    'index' => 'my_index',
    'type' => 'my_type',
    'search_type' => 'count',  // <-- Note search_type = count, to ignore search hits
    'body' => [
        'query' => [
            'match' => [
                'category' => 'pie'
            ]
        ],
        'aggs' => [
            'category' => [
                'terms' => [
                    'field' => 'category'
                ]
            ]
        ]
    ]
];

$results = $client->search($query);