elasticsearch - 哪个DSL对执行预过滤查询是正确的?

标签 elasticsearch

我回顾了保存的一些查询,看来我已经设法通过三种不同的方式实现了相同的查询。它们都返回相同的数据,但是哪一个是“正确的”?即,哪个不包含多余的代码,并且性能最高?

选项1

{
"query":{
   "bool":{
      "must":[
         {
            "match":{
               "event":"eventname"
            }
         },
         {
            "range":{
               "@timestamp":{
                  "gt":"now-70s"
               }
            }
         }
      ]
   }
},
 "aggs":{
    "myterms":{
       "terms":{
          "field":"fieldname"
       }
    }
 }
}

选项2
{
   "query":{
      "filtered":{
         "filter":{
            "bool":{
               "must":[
                  {
                     "match":{
                        "event":"eventname"
                     }
                  },
                  {
                     "range":{
                        "@timestamp":{
                           "gt":"now-70s"
                        }
                     }
                  }
               ]
            }
         }
      }
   },
   "aggs":{
      "myterms":{
         "terms":{
            "field":"fieldname"
         }
      }
   }
}

选项3
{
   "query":{
      "filtered":{
         "query":{
            "bool":{
               "must":[
                  {
                     "match":{
                        "event":"eventname"
                     }
                  },
                  {
                     "range":{
                        "@timestamp":{
                           "gt":"now-70s"
                        }
                     }
                  }
               ]
            }
         }
      }
   },
   "aggs":{
      "myterms":{
         "terms":{
            "field":"fieldname"
         }
      }
   }
}

如果我猜到了,我会选择选项2,因为其他选项似乎显示它们正在作为查询运行。但是有关DSL查询应采用的正确格式的文档非常令人困惑。

最佳答案

根据您的评论,我会选择选项2,但为启动器提供一个简单的term过滤器,而不是过滤器中不允许的match

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "event": "eventname"
              }
            },
            {
              "range": {
                "@timestamp": {
                  "gt": "now-70s"
                }
              }
            }
          ]
        }
      }
    }
  },
  "aggs": {
    "myterms": {
      "terms": {
        "field": "event"
      }
    }
  }
}

关于elasticsearch - 哪个DSL对执行预过滤查询是正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30601233/

相关文章:

Elasticsearch关键字和小写以及聚合

curl - 仅从 elasticsearch 查询返回 _source 数据

performance - 用不同的Java堆进行Elasticsearch,这有关系吗?

json - ElasticClient检查连接状态时出现错误

elasticsearch - 检索唯一值总数 kibana + Elasticsearch

elasticsearch - Elasticsearch:如何找出一个值是否匹配列表中的任何值?

elasticsearch - Elasticsearch中的复杂 bool 查询

amazon-web-services - Elasticsearch 服务AWS:滚动API没有给我预期的响应

algorithm - 如何实现标签搜索?

ElasticSearch 映射折叠/对分组文档执行操作的结果