elasticsearch - 如何从 ElasticSearch 记录中聚合匹配的前缀/短语?

标签 elasticsearch elasticsearch-aggregation match-phrase

我有一个字段“部门”,它是一个列表: { “部门”:[“餐饮服务”,“软件开发”,“制造”,“部署”] }'

我想聚合“部门”中以“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/

相关文章:

elasticsearch - 如何在 Elasticsearch 中必须或必须使用多个匹配短语?

elasticsearch - 匹配查询不返回完全匹配作为第一行

elasticsearch - 按索引文件夹备份、删除、恢复 Elasticsearch 索引

elasticsearch - 聚合 Elasticsearch 5

regex - Elasticsearch 通配符、regexp、match_phrase、前缀查询返回错误结果

elasticsearch - ElasticSearch-整个文档中的词组匹配?不只是一个特定领域

elasticsearch - Elasticsearch中的重新索引需要很长时间

java - 如何使用Java API编写此Elasticsearch查询

elasticsearch - 如何从 Elasticsearch 中获取条件数据

spring-boot - 文本字段未针对需要每个文档 : Elasticsearch 的操作进行优化