原文链接:http://blog.ifootsteps.com/?p=96
ElasticSearch查询语句主要有两种,一种为query 一种为filter.对于query来说需要进行评分过程所以是要被filter慢一些的.而普通的match又会比terms慢一些,所以当filter和term组合一起时效率会提升更多.
比如:
GET index/type/_search { "query": { "filtered": { "filter": { "query": { "terms": { "name": [ "西直门", "烤鸭", "周黑鸭", "看" ], "minimum_match": 2 } } } } } }
目前minimum_match的数值设置为terms的数量 /2 向上取整.
这个语句是目前使用的效率最高的无评分语句.java转化很简单就不贴例子了.
还有一种是带评分的query语句
GET index/type/_search { "query": { "bool": { "should": [ { "terms": { "name": [ "西直门", "烤鸭", "看" ], "minimum_match":2 } } ] } } }
这两种都利用的terms,这就是说在查询时必须利用elasticsearch分词插件,在查询前预分词,利用分词结果查询.
所以也可以使用match查询当然效率相对会低一些
GET index/type/_search { "query": { "filtered": { "filter": { "query": { "match": { "name": { "query": "东直门烤鸭", "operator": "and"//默认为or 需要精确查找时候可以设置为and } } } } } } }
当然还有最简单的查询方式
GET index/type/_search?size=1 { "query": { "match": { "name": { "query": "东直门烤鸭" , "operator": "or" } } } }
这里指定了size等于1,为了提高一些效率也可以不设置,默认为10