两个ElasticSearch查找查询中哪一个更高效?

nqwrtyyt  于 2023-08-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(83)

我是ElasticSearch的新手,正在学习它的dsl。我编写了两个查询,获取相同的结果集。

查询1

{ "query": {
      "bool": {
        "filter": {
          "bool": {
          "must": [
              {
                  "match": {
                      "vin": "okhifeb"
                  }
              },
              {
                  "match": {
                      "reportType": "OVERSPEEDING"
                  }
              },
              {
                "range": {
                    "startTime": {
                    "gte": "2023-07-01T00:00:00"
                    }
                }
            },
            {
                "range": {
                    "endTime": {
                    "lte": "2023-07-18T00:00:00"
                    }
                }
            }
          ]
        }
        }
      }
  }
}

字符串

查询2

{
    "query": {
        "bool": {
            "must": [
                {
                    "terms": {
                        "vin.keyword": ["okhifeb"]
                    }
                },
                {
                    "match": {
                        "reportType": "OVERSPEEDING"
                    }
                },
                {
                    "range": {
                        "startTime": {
                        "gte": "2023-07-01T00:00:00"
                        }
                    }
                },
                {
                    "range": {
                        "endTime": {
                        "lte": "2023-07-18T00:00:00"
                        }
                    }
                }
            ]
        }
    }
}


哪种查询更有效?两个查询都有类似的took值。一般来说,哪一种更有效率--还是火柴?filter使查询效率如何,何时有用?

bcs8qyzn

bcs8qyzn1#

第一个,因为你的约束是关于精确匹配的,你不需要评分,bool/must必然意味着评分。
重写了优化查询,但没有不必要的嵌套bool/must

{
  "query": {
    "bool": {
      "filter": [
        {
          "match": {
            "vin": "okhifeb"
          }
        },
        {
          "match": {
            "reportType": "OVERSPEEDING"
          }
        },
        {
          "range": {
            "startTime": {
              "gte": "2023-07-01T00:00:00"
            }
          }
        },
        {
          "range": {
            "endTime": {
              "lte": "2023-07-18T00:00:00"
            }
          }
        }
      ]
    }
  }
}

字符串

相关问题