zoukankan      html  css  js  c++  java
  • 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就不再继续搜索倒排索引了。

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

  • 相关阅读:
    mysql千万级数据量根据索引优化查询速度
    Centos 7 开放查看端口 防火墙关闭打开
    Spring-Quartz 配置执行时间参数
    Curl命令查看请求响应时间
    Centos 7 安装 Mongodb
    配置Docker加速器
    TCP端口状态说明ESTABLISHED、TIME_WAIT
    Maven依赖项Scope属性设置含义
    实战JAVA虚拟机 JVM故障诊断与性能优化(十)---字节码的执行
    代理模式(Proxy)_java实现
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8527012.html
Copyright © 2011-2022 走看看