Elasticsearch,按数组字段的值聚合
Elasticsearch, aggregate by array field's value
我的文档是这样的:
[
{
'user_id': 1,
'search_text': 'hi',
'searched_departments': ["dep4", "dep5", "dep6"]
},
{
'user_id': 1,
'search_text': 'hi there',
'searched_departments': ["dep4", "dep6"]
},
{
'user_id': 5,
'search_text': 'I like candy',
'searched_departments': ["dep4", "dep11", "dep999"]
},
{
'user_id': 2,
'search_text': 'hi',
'searched_departments': ["dep4", "dep6", "dep7"]
}
]
我想聚合 returns 每个部门的计数,
所以在这种情况下,我希望我的最终结果是这样的:
{
"dep4" : 4,
"dep6" : 3,
"dep5" : 1,
# and so on
}
我的映射:
{'mappings': {'properties': {'date': {'type': 'date'},
'searched_departments': {'type': 'text'},
'search_text': {'type': 'text'},
'user_id': {'type': 'text'}}}
您无法获得文本类型字段的聚合(如果您仍想生成文本类型字段的聚合,则应使用 fielddata
参数启用字段 true
)。为了获得聚合,您可以将 searched_departments
字段定义为 multi field,关键字和文本都是类型。
下面是示例映射:
{
"mappings": {
"properties": {
"date": {
"type": "date"
},
"searched_departments": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"search_text": {
"type": "text"
},
"user_id": {
"type": "text"
}
}
}
}
然后下面的查询将为您提供预期的结果:
POST index_name/_search
{
"query": {
"match_all": {}
},
"aggs": {
"dept_count": {
"terms": {
"field": "searched_departments.keyword",
"size": 10
}
}
}
}
我的文档是这样的:
[
{
'user_id': 1,
'search_text': 'hi',
'searched_departments': ["dep4", "dep5", "dep6"]
},
{
'user_id': 1,
'search_text': 'hi there',
'searched_departments': ["dep4", "dep6"]
},
{
'user_id': 5,
'search_text': 'I like candy',
'searched_departments': ["dep4", "dep11", "dep999"]
},
{
'user_id': 2,
'search_text': 'hi',
'searched_departments': ["dep4", "dep6", "dep7"]
}
]
我想聚合 returns 每个部门的计数, 所以在这种情况下,我希望我的最终结果是这样的:
{
"dep4" : 4,
"dep6" : 3,
"dep5" : 1,
# and so on
}
我的映射:
{'mappings': {'properties': {'date': {'type': 'date'},
'searched_departments': {'type': 'text'},
'search_text': {'type': 'text'},
'user_id': {'type': 'text'}}}
您无法获得文本类型字段的聚合(如果您仍想生成文本类型字段的聚合,则应使用 fielddata
参数启用字段 true
)。为了获得聚合,您可以将 searched_departments
字段定义为 multi field,关键字和文本都是类型。
下面是示例映射:
{
"mappings": {
"properties": {
"date": {
"type": "date"
},
"searched_departments": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"search_text": {
"type": "text"
},
"user_id": {
"type": "text"
}
}
}
}
然后下面的查询将为您提供预期的结果:
POST index_name/_search
{
"query": {
"match_all": {}
},
"aggs": {
"dept_count": {
"terms": {
"field": "searched_departments.keyword",
"size": 10
}
}
}
}