这篇文章我们介绍下match_phrase_prefix前缀索引。先举例一个场景
这种百度搜索提示是我们经常会见到的,这种是怎么做的呢?
其实就是索引了一段话,例如:架构师和程序员的区别,这里我们我们搜索架构师,那么他就会自动管理起来。这个就和我们今天介绍的match_phrase_prefix搜索是一样的。
match_phrase_prefix查询的意思是,会对最后一个关键词进行分词,然后会对最后一个关键词进行逐个匹配。
下面我们演示一下,还是使用上一篇文章的test索引进行测试。
一、搜索do
从上面的文本里面我们可以看到是没有一个单独的do的关键词的,英文分词会根据空格进行分词,因此会有doing的分词,那么在前缀匹配里面do应该是可以匹配到doing的,测试一下:
post /test/_search { "query": { "match_phrase_prefix": { "description": "do" } } }
可以看到被正确的所以查询出来了。
备注
1、这里我们介绍了会对最后一个关键词进行分词前缀索引,这里我们搜索的关键词只有一个do,所以这个do就是最后一个关键词
2、在查询的时候一定是某个关键词在倒排索引里面的前缀匹配,例如存储的信息是 xxxdoing,此时搜索do的时候,do不在最前面,因此这个xxxdoing是不会被匹配查询出来的。
二、添加短语搜索
计入match_phrase_prefix里面的phrase是短语的一次,也就是我们输入的关键词可以使短语。下面我们演示一下
post /test/_search { "query": { "match_phrase_prefix": { "description": "you do" } } }
备注:
1、这里查询的是 you do,此时对于最后一个关键词就是do,所以会对do进行前缀匹配。
2、这里查询的是 you do,此时不会对最后一个关键词之前的关键词进行分词匹配而是要进行完全匹配,因此这里我们可以看出来只有id为2的这条记录被查询出来了。
最后:
1、短语前缀索引常用的场景主要是在搜索提示里面使用率非常高。
2、短语前缀匹配的内容都需要被分成,也就是存储字段常见为text类型的。
3、短语前缀匹配不仅适用于英文,而且适用于中文,只要被分词都可以被使用。
还没有评论,来说两句吧...