在使用搜索引擎的时候,我们大部分时间不一定会涉及到精准查询,有时候我们需要对查询单词做分词,这样可以尽量匹配到我们想要的关键词。但是为了能提高查询效率,需要设置一定的条件,这时候match query+term filter过滤器的模式就是比较适合我们的。在日常的搜索引擎使用过程中,大家会经常见到这种模式。
match query的原理是会会搜索词进行分词,举个例子:
在搜索引擎里面的index里,name字段存储了一个中华人民共和国,那么我们在使用“中华共和国”这5个字的时候,也能能被查询出来的,因此name字段的中华人民共和国被分词成了“中华”“人民”“共和国”在使用match查询的时候也会被进行分词为“中华”“共和国”。所以这个搜索是能被完全命中的,下面我们具体演示一下。
一、创建一个test的索引
put /test { "mappings": { "properties": { "name": { "type": "text", "analyzer": "ik_max_word" }, "type": { "type": "integer" } } }, "settings": { "index": { "number_of_shards": "1", "number_of_replicas": "0" } } }
二、向test插入几条数据
post /test/_doc/1 {"name":"中华人民共和国","type":1} post /test/_doc/2 {"name":"中华","type":2}
三、查看分词的结果
post /_analyze { "analyzer": "ik_max_word", "text": "中华人民共和国 " }
四、查询"中华"
post /test/_search { "query": { "match": { "name": "中华" } } }
从上图可以看到两个都被查询出来了,但是我们还有一个type,所以此时我们加上filter查询
五、使用match和filter同时进行查询
post /test/_search { "query": { "bool": { "must": [{ "match": { "name": "中华" } }], "filter": { "term": { "type": 1 } } } } }
上面的案例就是一个匹配match查询+filter过滤器一起使用的案例,这也是在业务中经常使用到的。
备注:
1、这里使用match查询的时候会自动对查询关键词进行分词,例如我们查询中华人民共和国,可以看到中华也被查询出来了。
2、添加filter可以更快的查询出来结果,真是业务中尽量使用filter过滤器。
还没有评论,来说两句吧...