在使用搜索引擎的时候,我们大部分时间不一定会涉及到精准查询,有时候我们需要对查询单词做分词,这样可以尽量匹配到我们想要的关键词。但是为了能提高查询效率,需要设置一定的条件,这时候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过滤器。







还没有评论,来说两句吧...