【问题标题】:Filter with match_all VS query使用 match_all VS 查询过滤
【发布时间】:2015-07-16 16:44:19
【问题描述】:

我有两种类型的查询。它们在逻辑上是相同的,但是我不确定两者之间是否存在任何性能差异。

如果有人能启发我,我会很高兴。

使用match_allfilter

{
  "query": {
    "filtered": {
      "query": {
        "term": {
          "user_id": "1234567"
        }
      },
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "ephoc_date": {
                  "lt": 1437033590,
                  "gte": 1437026390
                }
              }
            }
          ]
        }
      }
    }
  }
}

使用term查询:

{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "user_id": "1234567"
              }
            },
            {
              "range": {
                "ephoc_date": {
                  "lt": 1437033590,
                  "gte": 1437026390
                }
              }
            }
          ]
        }
      }
    }
  }
}

【问题讨论】:

    标签: performance elasticsearch


    【解决方案1】:

    查看您的查询,您似乎并不关心如何根据 user_id 字段的值为“1234567”对文档进行评分。我的意思是——如果不止一个文档将user_id 设置为“1234567”,那么您不必关心结果中文档的顺序。如果是这种情况,第二个选项在性能方面会更好,因为在第一个查询中存在与评分相关的一些计算成本,而在第二个查询中没有评分。顺便说一句,您的第二个查询也可以简化为:

    {
       "filter": {
          "bool": {
             "must": [
                {
                   "term": {
                      "user_id": "1234567"
                   }
                },
                {
                   "range": {
                      "ephoc_date": {
                         "lt": 1437033590,
                         "gte": 1437026390
                      }
                   }
                }
             ]
          }
       }
    }
    

    【讨论】:

    • 但是match_all 查询在性能方面不是很昂贵吗?在将filter 应用于它们之前,它不会加载整个文档吗?
    • 它不像你想象的那样工作。首先执行过滤器以获取匹配的文档集。 query 在这组文档上工作。
    • 您建议的简化查询在性能上是否与我的第二个查询一样好,这两个查询都比第一个查询好?
    • 是的,简化查询的性能与您的第二个查询完全相同。
    猜你喜欢
    • 2019-09-26
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多