匹配或期限查询长属性以进行完全匹配?

时间:2015-01-05 17:53:47

标签: elasticsearch

我的文档具有以下映射属性:

"sid" : {"type" : "long", "store": "yes", "index": "not_analyzed"},

此属性对每条记录只有一个长值。我想查询这个属性。我尝试了以下两个查询:

{
    "query" : {
        "term" : {
             "sid" : 10
        }
    }
}

{
    "query" : {
        "match" : {
             "sid" : 10
        }
    }
}

两个查询都可以工作并返回目标文档。我的问题:哪一个更有效率?为什么?

2 个答案:

答案 0 :(得分:3)

您希望使用术语查询,如果您想要更有效,请使用过滤后的查询,以便缓存结果。

GET index1/test/_search
{
  "query": {
    "filtered": {
      "filter": {
        "term": {
          "sid": 10
        }
      }
    }
  }
}

答案 1 :(得分:1)

两者的工作方式与您提到的方式相同。与匹配查询不同,术语查询匹配具有包含术语(未分析!)的字段的文档。所以我的观点是,在您的情况下,术语查询更有效,因为不需要进行分析。
请参阅:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-term-query.html