列表中正则表达式匹配上的 Elasticsearch 聚合

dar*_*gma 2 regex elasticsearch

我在 elasticsearch 中的文档是这样的

{
    ...
    dimensions : list[string]
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想在与正则表达式匹配的所有文档中找到所有维度。我觉得聚合可能会起作用,但我在制定它时遇到了麻烦。

例如,假设我有如下三个文件:

{
    ...
    dimensions : ["alternative", "alto", "hello"]
    ...
}


{
    ...
    dimensions : ["hello", "altar"]
    ...
}


{
    ...
    dimensions : ["nore", "sore"]
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想["alternative", "alto", "altar"]在查询正则表达式时得到结果"alt.*"

Val*_*Val 5

您可以terms通过使用include属性参数化的简单聚合来实现这一点,您可以使用该属性指定正则表达式(例如alt.*在您的情况下)或要包含在存储桶中的值数组。请注意exclude,如果需要,还有对应的:

{
  "size": 0,
  "aggs": {
    "dims": {
      "terms": {
        "field": "dimensions",
        "include": "alt.*"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

结果:

{
  ...
  "aggregations" : {
    "dims" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [ {
        "key" : "altar",
        "doc_count" : 1
      }, {
        "key" : "alternative",
        "doc_count" : 1
      }, {
        "key" : "alto",
        "doc_count" : 1
      } ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)