我有一个字段“部门”,它是一个列表: { “部门”:[“餐饮服务”,“软件开发”,“制造”,“部署”] }'
我想聚合“部门”中以“d”开头的元素。即,从所有记录进行部署。
我能够找到包含一个前缀为“d”但无法聚合它们的元素的记录。相反,我在查询前缀“d”后返回的记录中汇总了“部门”的所有元素。
{
"query": {
"bool": {
"filter": {
"match_phrase_prefix": {
"Departments": {"query": "a"}
}
}
}
},
"aggs" : {
"all_locations" : {
"terms" : { "field" : "Departments" }
}
}
}
例如,如果我总共有 4 条记录,其中“部署”出现在 1 条记录中,那么我想要:
部署:1
但我实际得到的是该记录中存在“部署”的所有元素的频率。
部署:1, 食物:1, 服务:1, 软件:1, 发展:1, 制造:1
最佳答案
这很简单。只需使用 include关键字并在 Terms Query 中向其添加所需的正则表达式值你会得到你想要的。
我在下面提到了解决方案:
POST <your_index_name>/_search
{
"query":{
"bool":{
"filter":{
"match_phrase_prefix":{
"Departments":{
"query":"a"
}
}
}
}
},
"aggs":{
"all_locations":{
"terms":{
"field":"Departments",
"include":"D.*"
}
}
}
}
上面的查询只会返回以 D
开头的聚合桶。您可以将其更改为 Dep.*
以测试 Deployment
如果您认为它解决了您的要求,请随时接受/赞成答案。欢迎查询。
关于elasticsearch - 如何从 ElasticSearch 记录中聚合匹配的前缀/短语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55755349/