您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Elasticsearch过滤多个术语,仅包含匹配结果,而不包含任何匹配结果

Elasticsearch过滤多个术语,仅包含匹配结果,而不包含任何匹配结果

如果只希望使用titleid == 1AND 记录,则personid == 'a'可以在两个字段上进行过滤。只有布尔查询使用mustshouldmost_not。使用过滤器,因为它按照定义进行过滤(例如删除),因此must

"query": {
  "bool": {
    "filter": [
      {
        "term": {
          "titleId": { "value": 1 }
        } 
      },
      {
        "term": {
          "personid": { "value": "a" }
        }
      }
    ]
  }
}

现在,您的问题看起来像是要过滤和汇总结果,然后对这些结果进行汇总。有一些指标存储桶聚合

使用存储桶选择器聚合 (未经测试,但如果不正确,则应该非常接近)

{
    "aggs" : {
        "title_id" : {
            "filter" : { "terms": { "personid": ["a","b","c"] } },
            "aggs" : {
                "id_count" : { "count" : { "field" : "titleid" } }
            }
        },      
        aggs": {
            "count_filter": {
               "bucket_selector": {
                  "buckets_path": {
                     "the_doc_count": "_count"
                  },
                  "script": "the_doc_count == 3"
               }
            }
         }  
    }
}

但是,请注意,管道聚合将对其他聚合产生的输出起作用,因此计算初始doc_counts所需完成的工作总量将是相同的。由于需要为每个输入存储桶执行脚本部分,因此对于高基数字段,操作可能会很慢,如成千上万的术语。

其他 2022/1/1 18:15:01 有466人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶