加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ES基于completionsuggest实现搜索提示

(2023-06-02 22:23:43)
分类: 数据库es

转:https://www.codenong.com/cs106255517/

https://i2.wp.com/img-blog.csdnimg.cn/20200521134706390.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODkzMjAzNQ==,size_16,color_FFFFFF,t_70

  • Term Suggester,基于编辑距离,对analyze过的单个term去提供建议,并不会考虑多个term/词组之间的关系。quert -> query
  • Phrase Suggester,在Term Suggester的基础上,通过ngram以词组为单位返回建议。noble prize -> nobel prize
  • Completion Suggester,FST数据结构,类似Trie树,不用打开倒排,快速返回,前缀匹配
  • Context Suggester,在Completion Suggester的基础上,用于filter和boost

下面说说在es中的种实现搜索提示的功能,基于completion suggest 进行实现,其在实际应用中搜索性能更加高效。

假如文档库里有一堆关于大话西游的,比如,“大话西游电影”,“大话西游小说”,"大话西游舞台剧"等,这里我们需要搜索以"大话西游"开头的文档。

1、自定义index,及字段分词属性,这里用IK中文分词器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
PUT /news_website
{
  "mappings": {
    "news" : {
      "properties" : {
        "title" : {
          "type": "text",
          "analyzer": "ik_max_word",
          "fields": {
            "suggest" : {
              "type" : "completion",
              "analyzer": "ik_max_word"
            }
          }
        },
        "content": {
          "type": "text",
          "analyzer": "ik_max_word"
        }
      }
    }
  }
}

2、completion,es实现的时候,是非常高性能的,会构建不是倒排索引,也不是正拍索引,就是纯的用于进行前缀搜索的一种特殊的数据结构,而且会全部放在内存中,所以auto completion进行的前缀搜索提示,性能是非常高的,向索引插入几条数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PUT /news_website/news/1
{
  "title": "大话西游电影",
  "content": "大话西游的电影时隔20年即将在2017年4月重映"
}
PUT /news_website/news/2
{
  "title": "大话西游小说",
  "content": "某知名网络小说作家已经完成了大话西游同名小说的出版"
}
PUT /news_website/news/3
{
  "title": "大话西游手游",
  "content": "网易游戏近日出品了大话西游经典IP的手游,正在火爆内测中"
}
PUT /news_website/news/4
{
  "title": "我想看大话西游手游",
  "content": "星爷的大话西游2怎么还没有出来,等不及了"
}

https://i2.wp.com/img-blog.csdnimg.cn/20200521134943297.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODkzMjAzNQ==,size_16,color_FFFFFF,t_70
3、查询:

1
2
3
4
5
6
7
8
9
10
11
GET /news_website/news/_search
{
  "suggest": {
    "my-suggest" : {
      "prefix" : "大话西游",
      "completion" : {
        "field" : "title.suggest"
      }
    }
  }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有