我有多个 flex 文档,其字段为“cityId”,“cityName”。我想计算具有特定“cityId”和“cityName”的文档的出现次数。
聚合查询以获取cityId并计数:
GET _search
{
"aggs": {
"CityIdCount": {
"terms": {
"field": "cityId",
"size": 0
}
}
},
"query": {
"bool": {
"must": [
...........................
这是现有查询,其结果为(key为cityId,doc_count为出现的次数:
{
“关键”:40,
“doc_count”:4906
},
这是我尝试获取的查询(cityId,cityName,doc_count),结果为(key为cityName,doc_count为该名称的出现次数:{
“key”:“Thane”,
“doc_count”:4906
}
GET _search
{
"aggs": {
"CityIdCount": {
"terms": {
"field": "cityId",
"field": "cityName",
"size": 0
}
}
},
"query": {
"bool": {
"must": [
..............................
我想全部在一起,例如:“cityId”,“cityName”,“doc_count”。
正确的查询是什么?
最佳答案
您(目前至少)无法按照建议的方式跨多个字段的合词执行术语汇总。您可以通过以下两种方式之一进行操作:
terms
aggregation with a script连接要在其上执行聚合的字段。对于您的用例来说,这可能表现良好,但是请注意,您在查询时要付出性能成本。 not_analyzed
字段中,例如在您的应用程序中或使用 cityIdAndName
的copy_to
,并在此字段上使用术语聚合。以索引更多数据为代价,这将比第一种方法好得多。 关于elasticsearch - 聚合查询:如何聚合并获取带有文档计数的多个值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37705210/