Elasticsearch实现hotel索引库自动补全、拼音搜索功能

devtools/2024/9/23 10:25:53/

Elasticsearch实现hotel索引库自动补全、拼音搜索功能

 在这里边我们有两个字段需要用拼音分词器,一个name字段,一个all字段。 然后我们还需要去实现自动补全,而自动补全对应的字段必须使用completion类型。目前我们酒店里面所有的字段都采用的是这种常规类型,没有completion 类型。所以我们一定要在索引库里面加一个新的字段,比如说我起个名字就叫suggestion。

这个字段它必须采用completion 类型,并且我们将来要去使用拼音分词器,因为我们肯定希望将来要根据拼音首字母去做自动补全,不仅仅是根据英文单词,那么这些功能功能都做完了以后,我们还需要去改我们的java代码。

你索引库里边字段增加了,你的java代码是不是也要增加?最后我们就可以重新去导入数据,测试这个拼音分词的,还有自动补全的功能了。

下边我们就逐一的来去做一下。首先第一步我们去修改酒店索引库数据结构。

 sighting就是来定义索引库的分词器的,大家可以看到分词器里面,

Keyword不分词:它的词条直接作为一个整体,然后再去用拼音,因为我将来参与自动补全的,肯定就是固定的一个一个的词条。我们会把这些词条放到数组当中。 因此它本身就是个词条,还有必要再分词吗? 没必要了,所以我们就把它直接做成Keyword类型,不分词,然后再去用这个拼音分词器转成拼音就可以了。

将来我们去做全文检索的,应该用text_analyzer。 如果说做自动补全的,用completion_analyzer

接下来就是定义酒店的字段了。 需要注意的是,我们把这个name字段,它的分词器定义成了text_analyzer   ,搜索的时候我们 不能用text_analyzer,应该用这个传统的分词器,所以我们用了ik_smart,与此类似的,还有我们的这个all字段,它也是在创建索引时用text_analyzer ,然后在搜索时用ik_smart。 最后我们还添加了一个suggestion字段,这个字段将来是来自自动补全的,所以它的类型就定义成了completion类型。那他用的分词器是completion_analyzer

先删除之前的索引库,再设置如下:DELETE /hotel

// 酒店数据索引库
PUT /hotel
{"settings": {"analysis": {"analyzer": {"text_anlyzer": {"tokenizer": "ik_max_word","filter": "py"},"completion_analyzer": {"tokenizer": "keyword","filter": "py"}},"filter": {"py": {"type": "pinyin","keep_full_pinyin": false,"keep_joined_full_pinyin": true,"keep_original": true,"limit_first_letter_length": 16,"remove_duplicated_term": true,"none_chinese_pinyin_tokenize": false}}}},"mappings": {"properties": {"id":{"type": "keyword"},"name":{"type": "text","analyzer": "text_anlyzer","search_analyzer": "ik_smart","copy_to": "all"},"address":{"type": "keyword","index": false},"price":{"type": "integer"},"score":{"type": "integer"},"brand":{"type": "keyword","copy_to": "all"},"city":{"type": "keyword"},"starName":{"type": "keyword"},"business":{"type": "keyword","copy_to": "all"},"location":{"type": "geo_point"},"pic":{"type": "keyword","index": false},"all":{"type": "text","analyzer": "text_anlyzer","search_analyzer": "ik_smart"},"suggestion":{"type": "completion","analyzer": "completion_analyzer"}}}
}


http://www.ppmy.cn/devtools/22785.html

相关文章

Day27:阻塞队列、Kafka入门、发送系统通知、显示系统

阻塞队列BlockingQueue BlockingQueue 解决线程通信的问题。阻塞方法:put、take。 生产者消费者模式 生产者:产生数据的线程。消费者:使用数据的线程。 (Thread1生产者,Thread2消费者) 实现类 ArrayBlockingQueueLinkedBlockingQueuePr…

PDF高效编辑器,一键转换将PDF文件转换成HTML文件,开启文件处理新篇章!

文件格式的转换与处理已成为我们日常工作中不可或缺的一部分。为了满足广大用户对高效、便捷文件处理的需求,我们荣幸地推出了全新的PDF高效编辑器——PDF到HTML一键转换工具!这款工具将为您带来前所未有的文件处理体验,让您轻松驾驭文件格式…

不同状态空间模型的实验对比(二)

对五个下游任务进行了实验比较,包括单/多标签分类、视觉对象跟踪、像素级分割、图像到文本生成和人/车辆再识别。 论文:https://arxiv.org/abs/2404.09516 作者单位:安徽大学、哈尔滨工业大学、北京大学更多相关工作将在以下GitHub上不断更新…

All in One mini主机搭建全屋主路由方案----自己实现自己的路由器,实现路由器自由!

1 接线 首先,需要保证家里当前状态是有网的状态(路由器有网并正常工作) 将鼠标键盘接在mini主机的USB口,HDMP/DP/VGA等接上显示器。从路由器的lan口接一根网线出来接在mini主机的ETH0上,接在mini主机上保证mini主机在…

短期动态IP介绍

IP代理作为一门新兴的网络技术,备受市场与用户的青睐。主要是帮助用户解除地域限制,登录海外网站,浏览海外用户信息。 代理商实际上是依托于海外服务器,将国内IP地址通过代理服务器隐匿后替换为海外IP地址,再由代理服…

每天一个数据分析题(二百九十七)

帮助了解当前每个维度项的业务行为结果的整体情况的是哪种指标计算方法? A. 常规求和 B. 累计求和 C. 常规计数 D. 非重复计数 题目来源于CDA模拟题库 点击此处获取答案 cda数据分析考试:点击进入

百度竞价开户详解:步骤、优势与注意事项

随着互联网的普及,网络营销已成为企业不可或缺的一部分。其中,百度竞价作为一种高效的网络推广方式,受到了越来越多企业的青睐。本文将详细介绍百度竞价开户的流程、优势以及注意事项,帮助企业更好地利用这一工具提升品牌知名度和…

chrome 安装devtools

chrome 安装devtools 下载安装 链接:https://github.com/vuejs/devtools 选择对应版本: 安装yarn 下载 npm install -g yarn --registryhttps://registry.npmmirror.com进入下载的目录安装依赖 yarn install --registryhttps://registry.npmmirror.…