欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

ElasticSearch的搜索建议功能suggest search(completion suggest)

发布时间:2024/3/26 47 豆豆
生活随笔 收集整理的这篇文章主要介绍了 ElasticSearch的搜索建议功能suggest search(completion suggest) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

出自 图灵学院 ElasticSearch课程, 我自己学完了,整理了一下,然后给老师说的话,记录了一下,发了个博客

概述

suggest search(completion suggest):就是建议搜索或称为搜索建议,也可以叫做自动完成-auto completion。类似百度中的搜索联想提示功能。

ES实现suggest的时候,性能非常高,其构建的不是倒排索引,也不是正排索引,就是纯的用于进行前缀搜索的一种特殊的数据结构,而且会全部放在内存中,所以suggest search进行的前缀搜索提示,性能是非常高。

需要使用suggest的时候,必须在定义index时,为其mapping指定开启suggest。具体如下:

入门使用suggest search

创建

PUT /movie {"mappings": {"properties": {"title": {"type": "text","analyzer": "ik_max_word","fields": {"suggest": { //这个名字可以随便起,这里取名为suggest"type": "completion", //类型是completion,就是自动补全"analyzer": "ik_max_word" //采用的分词器}}},"content": {"type": "text","analyzer": "ik_max_word"}}} }

插入三条测试数据

PUT /movie/_doc/1 { "title": "西游记电影系列", "content": "西游记之月光宝盒将与2021年进行......" }PUT /movie/_doc/2 { "title": "西游记文学系列", "content": "某知名网络小说作家已经完成了大话西游同名小说的出版" }PUT /movie/_doc/3 { "title": "西游记之大话西游手游", "content": "网易游戏近日出品了大话西游经典IP的手游,正在火爆内测中" }

suggest 搜索:

GET /movie/_search {"suggest": {//这个字段是关键字,不能随便起名"my-suggest": { // 这个是自己起的名字"prefix": "西游记", // 这个是前缀"completion": {"field": "title.suggest" //这个是你自己定义的索引}}} }

“field”: “title.suggest”:是你自己定义的索引

结果:

{"took" : 312,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 0,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"suggest" : {"my-suggest" : [{"text" : "西游记","offset" : 0,"length" : 3,"options" : [{"text" : "西游记之大话西游手游","_index" : "movie","_type" : "_doc","_id" : "3","_score" : 1.0,"_source" : {"title" : "西游记之大话西游手游","content" : "网易游戏近日出品了大话西游经典IP的手游,正在火爆内测中"}},{"text" : "西游记文学系列","_index" : "movie","_type" : "_doc","_id" : "2","_score" : 1.0,"_source" : {"title" : "西游记文学系列","content" : "某知名网络小说作家已经完成了大话西游同名小说的出版"}},{"text" : "西游记电影系列","_index" : "movie","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"title" : "西游记电影系列","content" : "西游记之月光宝盒将与2021年进行......"}}]}]} }

有没有发现,结果都是以 “西游记” 开头的, 当你输入"西游记"的时候, ElasticSearch就直接给"西游记"开头的数据都找出来给用户展示.

如果你输入"西游记手游" ,肯定是找不到的索引库里面为 “title” : “西游记之大话西游手游”, 的数据
,因为 suggest search 和模糊搜索是不一样的.因为suggest search 就是搜索以关键字开头的文本,并没有关键字在中间的.

比如说百度你搜索 “你好”, 出来的数据全都是你好开头的数据.没有开头不带"你好"的数据,中间带"你好"的数据


GET /movie/_search {"suggest": {"my-suggest": {"prefix": "西游记手游","completion": {"field": "title.suggest"}}} }

总结

以上是生活随笔为你收集整理的ElasticSearch的搜索建议功能suggest search(completion suggest)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。