与精确日期匹配时,术语过滤器是否比date_range更好?

问题描述 投票:0回答:1

[我试图找出哪种方法查询更好,但是我的测试无法得出结论性的结果,可能是因为我无法在本地生成足够的数据。

考虑此映射:

{
  "mappings": {
    "_doc": {
      "properties": {
        "day": {
          "type": "date",
          "format": "yyyyMMdd",
          "fields": {
              "keyword" : {
                  "type" : "keyword"
              }
          }
        },
        ... other stuff ...
      }
    }
  }
}

[寻找连续的日期范围(例如从20191001到20191010时),我可以使用termsdate_range,它们在性能,缓存或内存使用方面都具有更多优势?

使用terms

{
  "query" : {
    "bool" : {
      "must" : [
          { 
            "terms" : { 
              "day.keyword" : [ 
                "20191001", 
                "20191002", 
                "20191003",
                "20191004", 
                "20191005", 
                "20191006",
                "20191007", 
                "20191008", 
                "20191009",
                "20191010"
              ] 
            }
          } 
      ]
    }
  }
}

使用date_range

{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "day": {
              "gte": "20191001",
              "lte": "20191010"
            }
          }
        }
      ]
    }
  }
}
elasticsearch
1个回答
0
投票

考虑您要在1月17日到1月19日之间选择数据的情况。您必须在术语查询中指定所有日期。随着范围的增加,您的输入也会增加。

顾名思义,范围查询是查询连续范围之间指定的记录。

术语查询主要是在文档中搜索特定/确切的术语。

© www.soinside.com 2019 - 2024. All rights reserved.