elasticsearch - 聚合(一个字段中有多个值)elasticsearch
问题描述
我在一个字段中有许多值,当我进行聚合时,我将这些值作为单独的值接收。
例子:
name : jess , Region : new york
name : jess , Region : poland
要求 :
query = {
"size": total,
"aggs": {
"buckets_for_name": {
"terms": {
"field": "name",
"size": total
},
"aggs": {
"region_terms": {
"terms": {
"field": "region",
"size": total
}
}
}
}
}
}
response["aggregations"]["buckets_for_name"]["buckets"]
我得到:
{'key': 'jess ', 'doc_count': 61, 'region_terms': {'doc_count_error_upper_bound': 0, 'sum_other_doc_count': 0, 'buckets': [{'key': 'oran', 'doc_count': 60}, {'key': 'new ', 'doc_count': 1}, {'key': 'york', 'doc_count': 1}]}}, {'key': 'jess ', 'doc_count': 50, 'egion_terms': {'doc_count_error_upper_bound': 0, 'sum_other_doc_count': 0, 'buckets': [{'key': 'poland', 'doc_count': 50}]}}
和
pretty_results = []
for result in response["aggregations"]["buckets_for_name"]["buckets"]:
d = dict()
d["name"] = result["key"]
d["region"] = []
for region in result["region_terms"]["buckets"]:
d["region "].append(region ["key"])
pretty_results.append(d)
print(d)
我得到:
{'name': 'jess ', 'region ': ['new' , 'york', 'poland']}
我想得到这个结果:
{'name': 'jess ', 'region ': ['new york', 'poland']}
解决方案
(region
我认为name
)字段是使用标准分析器分析的,该分析器呈现new york
为被拆分为标记 [ new
, york
]。
您可能想要做的是设置一个keyword
映射以将字符串视为独立标记:
PUT regions
{
"mappings": {
"properties": {
"name": {
"type": "text",
"fielddata": true,
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"region": {
"type": "text",
"fielddata": true,
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
之后,在.keyword
字段上执行您的 aggs:
{
"size": 200,
"aggs": {
"buckets_for_name": {
"terms": {
"field": "name.keyword", <---
"size": 200
},
"aggs": {
"region_terms": {
"terms": {
"field": "region.keyword", <---
"size": 200
}
}
}
}
}
}
如果您想节省newyork
空间,请查看pattern_replace
分析仪内的过滤器。
从评论中编辑 Aggs 不是查询的一部分——它们有自己的范围——所以改变这个
{
"query": {
"aggs": {
"buckets_for_name": {
对此
{
"query": {
// possibly leave the whole query attribute out
},
"aggs": {
"buckets_for_name": {
...
推荐阅读
- typescript - 如何在 eslint 中使用 atom-typescript 或替代方法
- charts - ApexCharts:隐藏图表中的每第 n 个标签
- android - 如何修复“未安装应用程序” - Xamarin 应用程序分发
- sql - 统计多张表的普通用户数
- javascript - 如何删除多个数组项
- linux - 如何删除与字符串中的项目相似的文件
- c# - Google 请求同步操作返回 403
- git - 如何更改 PC 上的 Fork 文件位置
- mvvm - UWP ObservableCollection 通知 View 发生变化
- selenium - WebDriver 无法解析为类型,ChromeDriver 无法解析为类型