gpt4 book ai didi

elasticsearch - 过滤字符串类型数组值的聚合问题

转载 作者:行者123 更新时间:2023-12-03 01:55:19 24 4
gpt4 key购买 nike

我们正在为特定电子邮件的收件人编制索引,收件人可以是单个或多个。

以下是属性

  • FieldName:Subject,Type:String,Analyzer:Keyword
  • FieldName:Receivers,Type:String,Analyzedr:Keyword

  • 索引日期
  • Subject:hello,Receivers:["A@abc.com","B@abc","C@abc.com"]

  • 问题是过滤器聚合应用于术语聚合。如果对“A@abc.com”,“B @ abc”进行了过滤,则从逻辑上讲,它应仅在术语汇总中返回“A@abc.com”,“B @ abc”,但返回所有“A@abc.com”, “B @ abc”,C @ abc.com。

    以下是我的查询和输出。
    输入查询
    {
    "size":0,
    "aggs":{
    "filter":{
    "filter":{
    "terms":{
    "receivers":[
    "A@abc.com",
    "B@abc"
    ]
    }
    },
    "aggs":{
    "result":{
    "terms":{
    "field":"receivers"
    }
    }
    }
    }
    }}

    输出
    {
    "took": 1,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
    },
    "hits": {
    "total": 26464,
    "max_score": 0,
    "hits": []
    },
    "aggregations": {
    "filter": {
    "doc_count": 1,
    "result": {
    "doc_count_error_upper_bound": 0,
    "sum_other_doc_count": 0,
    "buckets": [
    {
    "key": "A@abc.com",
    "doc_count": 1
    },
    {
    "key": "B@abc",
    "doc_count": 1
    },
    {
    "key": "C@abc.net",
    "doc_count": 1
    }
    ]
    }
    }
    }}

    我们甚至尝试使用include,但是在某些情况下,我们可能需要在include self中使用正则表达式,如下所示。在我们需要“A@abc.com”,“B @ abc”的地方,还要仅从“A @ abc”中过滤 ".*abc.com.*" .com”,“B @ abc”。因此输出应为“A@abc.com”,但同时返回“A@abc.com”,“B @ abc”
    {
    "size":0,
    "aggs":{
    "filter":{
    "filter":{
    "terms":{
    "receiver":[
    "A@abc.com",
    "B@abc.com"
    ]
    }
    },
    "aggs":{
    "result":{
    "terms":{
    "field":"receiver",
    "include":[ ".*abc.com.*",
    "A@abc.com",
    "B@abc.com"
    ]
    }
    }
    }
    }
    }}

    请提出如何实现上述目标。

    提前致谢

    最佳答案

    您的查询应该有所不同:使用正则表达式时,该查询不应位于数组中,而应独立存在。并且点(.)应该转义,因为它是保留字符:

    {
    "size": 0,
    "aggs": {
    "filter": {
    "filter": {
    "terms": {
    "receiver": [
    "A@abc.com",
    "B@abc.com"
    ]
    }
    },
    "aggs": {
    "result": {
    "terms": {
    "field": "receiver",
    "include": ".*abc\\.com.*"
    }
    }
    }
    }
    }
    }

    关于elasticsearch - 过滤字符串类型数组值的聚合问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37180833/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com