【问题标题】:Elasticsearch Aggregation Query with multiple excludes具有多个排除项的 Elasticsearch 聚合查询
【发布时间】:2014-05-12 20:00:44
【问题描述】:

我在 ES 数据库中有一堆公司数据。我希望统计每家公司出现的文档数量,但aggregation 查询存在一些问题。我希望排除诸如“公司”或“公司”之类的术语。到目前为止,我已经能够按照下面的代码一次成功地完成一个学期。

{
    "aggs" : {
        "companies" : {
            "terms" : {
                "field" : "Companies.name",
                "exclude" : "corporation"
            }
        }
    }
}

返回

"aggregations": {
    "assignee": {
         "buckets": [
            {
               "key": "inc",
               "doc_count": 375
            },
            {
               "key": "company",
               "doc_count": 252
            }
         ]
     }
}

理想情况下,我希望能够做类似的事情

{
    "aggs" : {
        "companies" : {
            "terms" : {
                "field" : "Companies.name",
                "exclude" : ["corporation", "inc.", "inc", "co", "company", "the", "industries", "incorporated", "international"],
            }
        }
    }
}

但我一直没能找到一种不会引发错误的方法

我查看了 ES 文档中聚合的“术语”部分,只能找到单个排除的示例。我想知道是否可以排除多个术语,如果可以,正确的语法是什么所以。

注意:我知道我可以将该字段设置为“not_analyzed”并获取完整公司名称的分组,而不是拆分名称。但是,我犹豫要不要这样做,因为分析允许存储桶更容忍名称变化(即 Microsoft Corp 和 Microsoft Corporation)

【问题讨论】:

标签: elasticsearch filter elasticsearch-aggregation


【解决方案1】:

exclude parameter is a regular expression,因此您可以使用一个正则表达式来详尽列出所有选项:

"exclude" :
    "corporation|inc\\.|inc|co|company|the|industries|incorporated|international"

一般来说,转义值很重要(例如,.)。如果它不是一般生成的,那么您可以通过对它们进行分组来简化其中的一些(例如,inc\\.? 覆盖inc\\.|inc,或更复杂的:co(mpany|rporation)?)。如果这会运行很多,那么可能值得测试增加的复杂性如何影响性能。

还有可选的flags可以应用,它们是JavaPattern中存在的选项。可能会派上用场的是CASE_INSENSITIVE。

"exclude" : {
    "pattern" : "...expression as before...",
    "flags" : "CASE_INSENSITIVE"
}

【讨论】:

    【解决方案2】:

    这是一个老问题,但更新的答案:exclude 列表项的精确匹配当前支持数组

    因此 OP 中的数组语法现在是有效的并且可以按预期工作(除了有效的正则表达式答案之外)

    https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_filtering_values_with_exact_values

    【讨论】:

      猜你喜欢
      • 2020-07-21
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 2018-12-17
      • 1970-01-01
      • 2014-08-04
      相关资源
      最近更新 更多