es中match_phrase和term区别

文章目录

term是将传入的文本原封不动地(不分词)拿去查询。
match会对输入进行分词处理后再去查询,部分命中的结果也会按照评分由高到低显示出来。
match_phrase是按短语查询,只有存在这个短语的文档才会被显示出来。

也就是说,term和match_phrase都可以用于精确匹配,而match用于模糊匹配。

之前我以为match_phrase不会被分词,看来理解错了,其官方解释如下:

Like the match query, the match_phrase query first analyzes the query string to produce a list of terms. It then searches for all the terms, but keeps only documents that contain all of the search terms, in the same positions relative to each other.

总结下,这段话的3个要点:

  1. match_phrase还是分词后去搜的
  2. 目标文档需要包含分词后的所有词
  3. 目标文档还要保持这些词的相对顺序和文档中的一致

只有当这三个条件满足,才会命中文档!

那么,term和match_phrase都可以实现按短语搜索,二者在实际使用中有啥区别呢。

【发现问题】
1.我们先放入一个文档:
在这里插入图片描述

2.然后使用match_phrase搜索:

在这里插入图片描述

嗯,不出所料,搜索到了。

3.然后我们用term试试
在这里插入图片描述
纳尼!!!居然没有?那么全句带进去搜总行了吧
在这里插入图片描述
在这里插入图片描述
居然还是不行!!这就奇怪了。

【问题分析】我们来看看这句话的分词结果:

在这里插入图片描述
在这里插入图片描述
我们会发现,中文竟然被默认分词器分词单个字了!尴尬啊!!!
这就不难理解为啥term搜“学习”搜不到,搜全文也搜不到,因为存的是“学”和“习”。

【总结】如果使用term查询,要确保字段是no analyzed的。建索引的时候要注意。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值