我正在构建基于 Elasticsearch
. 我的产品有“品牌”字段。例如,我有两个品牌-汤米牛仔裤和汤米希尔菲格。当我尝试使用以下查询聚合结果时
$params = [
'index' => 'my_index',
'type' => 'my_type',
'body' => [
'query' => [
'term' => [
'brand' => 'tommy'
]
],
'aggs' => [
'brand' => [
'terms' => [
'field' => 'brand',
]
]
]
]
];
我期待两个结果在括号里-汤米希尔菲格和汤米牛仔裤与结果计数,但在我的情况下,它是这样的东西
[aggregations] => Array
(
[brand] => Array
(
[doc_count_error_upper_bound] => 0
[sum_other_doc_count] => 0
[buckets] => Array
(
[0] => Array
(
[key] => tommy
[doc_count] => 6
)
[1] => Array
(
[key] => hilfiger
[doc_count] => 4
)
[2] => Array
(
[key] => jeans
[doc_count] => 2
)
)
)
)
我怎样才能解决这个问题?
2条答案
按热度按时间lrpiutwd1#
最后,我明白了我的问题。这是一个有效的例子(基于nishant saini的回答)
结果是
qpgpyjmq2#
这可以通过
brand
类型字段text
再加上一个子字段keyword
类型为keyword
. 那你需要用term
字段查询brand
筛选结果并在字段上聚合brand.keyword
因此,Map将是:更新以征求意见:旧版本es(2.x)的Map:
以下是查询: