【ElasticSearch搜索推荐】基于search-time的match_phrase_prefix搜索推荐

数据准备

//创建索引
PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "title": {
          "type": "keyword"
        }
      }
    }
  }
}
//准备数据
POST my_index/my_type
{
  "title":"hello losser"
}
POST my_index/my_type
{
  "title":"hello win"
}
POST my_index/my_type
{
  "title":"hello world"
}
//搜索推荐 方式一
GET my_index/my_type/_search
{
  "query": {
    "match_phrase_prefix": {
      "title": "hello wo"
    }
  }
}
//搜索推荐 方式二
GET my_index/my_type/_search
{
  "query": {
    "match_phrase_prefix": {
      "title": {
        "query": "hello losser",
        "slop":1,
        "max_expansions": 5   //表示除本身外,最多可扩展数 为什么0和1 都是结果一样?
      }
    }
  }
}

 

注意:

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

          先执行match,查找出hello对应的doc,然后使用wo作为前缀扫描整个倒排索引,找到所有w对应的doc

    根据你的slop去计算,看在slop范围内,能不能让hello w,正好跟doc中的hello和w开头的单词的position相匹配

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

  2.尽量不要用,因为,最后一个前缀始终要去扫描大量的索引,性能可能会很差

posted @ 2021-12-20 23:43  听风是雨  阅读(111)  评论(0)    收藏  举报
/* 看板娘 */