弹性搜索返回唯一值
elasticsearch returning unique values
我有一个名为 'category' 的字段。
我可以 return 可能的类别列表,只需这样做:
$searchParams['body']['aggs']['category']['terms']['field'] = 'category';
但我想在该字段内搜索,并且 return 只搜索与我的查询匹配的类别。
示例列表:
- 披萨
- 苹果派
- 橘子派
- 纸杯蛋糕
- 汉堡
我想搜索 "pie" 并得到以下结果:
- 苹果派
- 橘子派
有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);
我有一个名为 'category' 的字段。
我可以 return 可能的类别列表,只需这样做:
$searchParams['body']['aggs']['category']['terms']['field'] = 'category';
但我想在该字段内搜索,并且 return 只搜索与我的查询匹配的类别。
示例列表:
- 披萨
- 苹果派
- 橘子派
- 纸杯蛋糕
- 汉堡
我想搜索 "pie" 并得到以下结果:
- 苹果派
- 橘子派
有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);