看看match_phrase查询原理就知道为什么会命中数据了。 match_phrase查询分析文本并根据分析的文本创建一个短语查询。match_phrase会将检索关键词分词。match_phrase的分词结果必须在被检索字段的分词中都包含,而且顺序必须相同,而且默认必须都是连续的。 问题解决 换分词器 第一想法是换分词器,用ik分词器 删除索引 DELETE...
一、写分词keyword、text 字符串 - text:文本索引,分词 默认结合standard analyzer(标准解析器)对文本进行分词、倒排索引。 不支持聚合,排序操作。 模糊匹配,支持 term、match 查询。 字符串 - keyword:关键词索引,不分词 不分词,直接将完整的文本保存到倒排索引中。 支持聚合、排序操作。 支持的最大长度为32766个...
原文链接:es笔记三之term,match,match_phrase 等查询方法介绍 首先介绍一下在 es 里有两种存储字符串的字段类型,一个是 keyword,一个是 text。 keyword 在存储数据的时候是作为一个整体存储的,不会对其进行分词处理 text 存储数据的时候会对字符串进行分词处理,然后存储。 而对于查询方法, term 是精确查询,match...
但是match_phrase 有一个 slop 参数可以用于忽略这种顺序,也就是允许搜索的关键词错位的个数,比如 'book a',分词后的 'book' 和 'a' 如果允许错位两个顺序(a 往前挪一个,book 往后挪一个,这是我理解的 slop 的操作用法),那么就可以筛选到我们这条数据,示例如下: GET/exam/_search{"query":{"match_phr...
{"query": {"match_all": {} } } 对应的QueryBuilderClass 为MatchAllQueryBuilder 具体方法为QueryBuilders.matchAllQuery() 全文查询 Full Text Queries 什么是全文查询? 像使用match或者query_string这样的高层查询都属于全文查询, 查询 日期(date) 或整数(integer) 字段,会将查询字符串分别作为日期或整数对待...
match分词,text也分词,只要match的分词结果和text的分词结果有相同的就匹配。 成功。如果都不相同就失败了。 3. 1)match_phrase匹配keyword字段。 这个同上必须跟keywork一致才可以。 只有这种情况才是成功的。 2)match_phrase匹配text字段。 match_phrase是分词的,text也是分词的。match_phrase的分词结果必须在text字...
通过分词测试,发现Token【我】与【系统学】的position差值为1(等于slop的值),所以文档4也被检索出来了。 ps:如果没看明白,那就来看下match_phrase query对应到mysql是怎样的吧! 数据的倒排序索引 4.2match_phrase query对应到mysql 代码语言:javascript
4)、match_phrase 【短语匹配】 将需要匹配的值当成一个整体单词(不分词)进行检索 举个栗子:查出 address 中包含mill road的所有记录,并给出相关性得分 GET /bank/_search{"query":{"match_phrase":{"address":"mill road"}}} 在这里插入图片描述 ...
从上面可以看出,查找时ik_smart将语句分为了快乐和感恩两个词,位置分别为1和2,而ik_max_word建索引时,快乐和感恩的位置分别是1和4,在match_phrase看来,这种是不匹配的,所以用ik_smart分词短语时无法查到或者查全数据。 好吧,既然ik_smart无法查到,我用ik_max_word查找总行了吧。用上述的例子,查找”快乐“时...
match_phrase_prefix 匹配前缀,比如对于 address 值为 'read a book' 的数据,我们只知道的值是 'read a bo',想要根据这个搜索词搜索完整的数据,就可以用到 match_phrase_prefix。 他的用法是这样的,先将检索词分词,然后将最后一个分词结果单独去匹配,所以这个搜索词的过程就是先根据 'read a' 的分词结果搜索...