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

embedded/2024/9/25 5:47:03/

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/embedded/22976.html

相关文章

实时采集麦克风并播放(springboot+webscoekt+webrtc)

项目技术 springbootwebscoektwebrtc 项目介绍 项目通过前端webrtc采集麦克风声音,通过websocket发送后台,然后处理成g711-alaw字节数据发生给广播UDP并播放。 后台处理项目使用线程池(5个线程)接受webrtc数据并处理g711-alaw字节数组放到Map容器中&…

Java SE入门及基础(50) Java实现LinkedList(单向链表、双向链表) Java实现栈

目录 List 接口 1. 特性描述 List 接口常用方法 2. ArrayList 示例及源码解读 3. LinkedList 示例及源码解读 单向链表 双向链表 4. 栈 练习 Java SE文章参考:Java SE入门及基础知识合集-CSDN博客 List 接口 1. 特性描述 A List is an ordered Collection (sometimes called…

windows下的iOS砸壳与ipa分析

点击上方↑↑↑蓝字[协议分析与还原]关注我们 “ 介绍如何在windows下进行iOS砸壳和对ipa进行分析。” iOS系统为了保护应用的安全,会对应用进行加密。这种加密方式被称为“壳”。壳的存在会阻碍开发者对应用进行反编译、分析和修改。 在某些情况下,需要…

机器学习:基于Sklearn、XGBoost框架,使用XGBClassifier、支持向量分类器和决策树分类器预测乳腺癌是良性还是恶性

前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…

第8章 软件工程

一、软件工程概述 (一)软件危机 1、含义:落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。 2、解决方案:引入软件工程的思想。 (二&#x…

任务调度xxljob的使用记录

1.基本使用 a.下载代码,地址:https://gitee.com/xuxueli0323/xxl-job.git b.执行sql,修改配置,启动任务调度中心的代码 启动代码后任务调度中心访问地址:http://localhost:8080/xxl-job-admin(自己机器…

代码随想录算法训练营DAY38|C++动态规划Part.1|动态规划理论基础、509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

文章目录 动态规划理论基础什么是动态规划动态规划的解题步骤DP数组以及下标的含义递推公式DP数组初始化DP数组遍历顺序打印DP数组动态规划五部曲 动态规划应该如何debug 509.斐波那契数什么是斐波那契数列动态规划五部曲确定dp数组下标以及含义确定递推公式dp数组如何初始化确…

中文输入法导致的高频事件

场景: input.addEventListener(input, (e) > {console.log(e.target.value) }); 当给一个输入框绑定了 input 事件,输入法切换到中文正在拼写的过程中也会触发 input 事件。 解决办法: 在中文拼写开始和结束的时候分别会触发 composit…