我的文档具有以下映射属性:
"sid" : {"type" : "long", "store": "yes", "index": "not_analyzed"},
此属性对每条记录只有一个长值。我想查询这个属性。我尝试了以下两个查询:
{
"query" : {
"term" : {
"sid" : 10
}
}
}
{
"query" : {
"match" : {
"sid" : 10
}
}
}
两个查询都可以工作并返回目标文档。我的问题:哪一个更有效率?为什么?
答案 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