elasticsearch - Elasticsearch中的多重或过滤器

标签 elasticsearch

您好,我无法确定Elasticsearch中多个OR的以下查询的正确性。我想选择所有唯一数据(不计数,而是选择所有行)

我在 flex 查询中对此的最佳尝试是

GET mystash/_search
{
    "aggs": {
        "uniques":{
             "filter":
            {
                "or":
                        [
                            { "term": { "url.raw" : "/a.json" } },
                            { "term": { "url.raw" : "/b.json" } },
                            { "term": { "url.raw" : "/c.json"} },
                            { "term": { "url.raw" : "/d.json"} }
                        ]
            },
            "aggs": {
                "unique" :{
                    "terms" :{
                        "field" : "id.raw",
                        "size" : 0
                    }
                }
            }
        }
    }
}

等效的SQL将是
SELECT DISTINCT id
FROM json_record
WHERE 
    json_record.url = 'a.json' OR
    json_record.url = 'b.json' OR
    json_record.url = 'c.json' OR
    json_record.url = 'd.json'

我想知道上面的查询是否正确,因为生成报表需要数据。

最佳答案

一些说明:

  • 您应该使用查询过滤器而不是聚合过滤器。您的查询将加载所有文档。
  • 您可以用一个词过滤器
  • 替换or + term过滤器
  • 您可以在查询的根部使用size = 0来仅获取agg结果而不是搜索结果

  • 示例代码:
    {"size":0,
      "query" :{"filtered":{"filter":{"terms":{"url":["a", "b", "c"]}}}}, 
       "aggs" :{"unique":{"term":{"field":"id", "size" :0}}}
    } 
    

    关于elasticsearch - Elasticsearch中的多重或过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33646543/

    相关文章:

    elasticsearch - 选择正确的min_gram和max_gram ngram值

    spring - elasticsearch 5.6.3兼容的spring数据elasticsearch版本

    search - 如何在 ElasticSearch 中索引和存储多种语言

    elasticsearch - 使用机器学习创建异常检测

    elasticsearch - 线程池/队列大小限制未解决

    elasticsearch - Elasticsearch shield 许可证在哪里获取?

    Elasticsearch 7.7.1 分片未分配

    apache-spark - 列数据到Spark结构化流中的嵌套json对象

    elasticsearch - 如何启用对 Elastic APM 服务器的远程访问/请求?

    authentication - 无法使用bin/plugin工具(elasticsearch)安装Head插件