23.match_phrase_prefix实现search-time搜索推荐

Posted Outback

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了23.match_phrase_prefix实现search-time搜索推荐相关的知识,希望对你有一定的参考价值。

主要知识点:

  • 搜索推荐的使用场景
  • 用法
  • 原理

一、搜索推荐的使用场景

搜索推荐,就是在你做搜索时,当你写出一部搜索词时,es会自提示接下来要写的词,比如当你在搜索hello w 时,如果es中有如下文档,则es会自动提示hello word、hello we、hello wind。类似我们在用百度时的自动搜索提示。

   

hello world

hello we

hello win

hello wind

hello dog

hello cat

   

hello w -->

   

hello world

hello we

hello win

hello wind

   

二、语法

   

GET /my_index/my_type/_search

{

"query": {

"match_phrase_prefix": {

"title": "hello d"

}

}

}

   

三、原理

原理跟match_phrase类似,唯一的区别,就是把最后一个term作为前缀去搜索

简单过程如下:

  • hello就是去进行match,搜索对应的doc
  • w,会作为前缀,去扫描整个倒排索引,找到所有w开头的doc
  • 然后找到所有doc中,即包含hello,又包含w开头的字符的doc
  • 然后根据你的slop去计算,看在slop范围内,能不能让hello w,正好跟doc中的hellow开头的单词的position相匹配

   

也可以指定slop,但是只有最后一个term会作为前缀

max_expansions:指定prefix最多匹配多少个term,超过这个数量就不继续匹配了,限定性能,默认情况下,前缀要扫描所有的倒排索引中的term,去查找w打头的单词,但是这样性能太差。可以用max_expansions限定,w前缀最多匹配多少个term就不再继续搜索倒排索引了。

最后说明,这种方式性能很差,一般情况下,不要用这种方式。

以上是关于23.match_phrase_prefix实现search-time搜索推荐的主要内容,如果未能解决你的问题,请参考以下文章

python排序算法实现(冒泡选择插入)

MQ任意延时消息基于服务端实现

MQ任意延时消息基于客户端实现

如何在 NextJs 中为 Material UI 的媒体查询实现 s-s-r?

Stack实现

用Lua实现string的trim()方法