使用match_all VS查询进行过滤

时间:2015-07-16 08:07:44

标签: performance elasticsearch

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

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

使用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
                }
              }
            }
          ]
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:3)

根据user_id字段为" 1234567"的价值,您可以查看自己的查询,而不关心如何评分文档。我的意思是 - 如果多个文档的user_id设置为" 1234567",则您不必关心结果中文档的顺序。如果是这种情况,第二个选项在性能方面更好,因为在第一个查询中有一些计算成本与第二个查询中没有评分相关。顺便说一下,您的第二个查询也可以简化为:

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