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

时间:2019-04-19 00:58:49

标签: 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

1 个答案:

答案 0 :(得分: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

如果您认为答案可以解决您的要求,请随时接受/支持。欢迎查询。