ES自动补全

安装IK分词器

要实现根据字母做补全,就必须对文档按照拼音分词。在GitHub上恰好有elasticsearch的拼音分词插件。地址:GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin is used to do conversion between Chinese characters and Pinyin.

或者:

链接:https://pan.baidu.com/s/1IH6YEaa0ol039plev1wnag?pwd=dvl5 
提取码:dvl5

安装方式与IK分词器一样,分三步:

①解压,命名为py

②上传到虚拟机中,elasticsearch的plugin目录

③重启elasticsearch④测试

详细安装步骤可以参考IK分词器的安装过程:怎么安装IK分词器-CSDN博客

测试用法如下:

结果:

自定义分词器

默认的拼音分词器会将每个汉字单独分为拼音,而我们希望的是每个词条形成一组拼音,需要对拼音分词器做个性化定制,形成自定义分词器。

elasticsearch中分词器(analyzer)的组成包含三部分:

  • character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符

  • tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smart

  • tokenizer filter:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等

文档分词时会依次由这三部分来处理文档:


PUT /test
{"settings": {"analysis": {"analyzer": { "my_analyzer": { "tokenizer": "ik_max_word","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": {"name":{"type": "text","analyzer": "my_analyzer","search_analyzer": "ik_smart"},"id":{"type": "keyword"}}}
}DELETE /test#测试分词器:
POST /test/_doc/1
{"id": 1,"name": "狮子"
}
POST /test/_doc/2
{"id": 2,"name": "虱子"
}GET /test/_search
{"query": {"match": {"name": "掉入狮子笼咋办"}}
}

自动补全查询

elasticsearch提供了Completion Suggester查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。为了提高补全查询的效率,对于文档中字段的类型有一些约束:

  • 参与补全查询的字段必须是completion类型。

  • 字段的内容一般是用来补全的多个词条形成的数组。

比如,一个这样的索引库:


#创建一个索引库
PUT test2
{"mappings": {"properties": {"title":{"type": "completion"}}}
}
#添加3个数据
POST test2/_doc
{"title": ["Sony", "WH-1000XM3"]
}
POST test2/_doc
{"title": ["SK-II", "PITERA"]
}
POST test2/_doc
{"title": ["Nintendo", "switch"]
}#自动补全查询
POST /test2/_search
{"suggest": {"title_suggest": {"text": "s", "completion": {"field": "title", "skip_duplicates": true, "size": 10 }}}
}

自动补全查询的JavaAPI

而自动补全的结果也比较特殊,解析的代码如下:

 //自动补全public List<String> getSuggestions(String prefix) {try {//1.准备RequestSearchRequest request = new SearchRequest("hotel");//2.准备DSLrequest.source().suggest(new SuggestBuilder().addSuggestion("mySuggestion",SuggestBuilders.completionSuggestion("suggestion").prefix(prefix).skipDuplicates(true).size(10)));//3,发起请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);//4,解析结果Suggest suggest = response.getSuggest();CompletionSuggestion completionSuggestion=suggest.getSuggestion("mySuggestion");//获取options并遍历List<String> result =new ArrayList<>();for (CompletionSuggestion.Entry.Option option : completionSuggestion.getOptions()) {//获取一个option中的text,也就是补全的词条String string = option.getText().string();result.add(string);}return result;} catch (IOException e) {throw new RuntimeException(e);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Maven】009-Maven 简单父子工程搭建

【Maven】009-Maven 简单父子工程搭建 文章目录 【Maven】009-Maven 简单父子工程搭建一、需求说明1、结构2、第三方库 二、工程搭建1、父工程第一步&#xff1a;创建父工程第二步&#xff1a;引入公共依赖 lombok 和管理 hutool 依赖版本 2、公共子模块第一步&#xff1a;创建…

3.三极管和MOS管

3.三极管和MOS管 基础知识三极管是电流控制型器件MOS管是电压控制型器件 分类及引脚定义电流导通方向基础应用常用MOS管电平转换电路MOS管实现电平转换用MOS管实现的“I2C总线电平转换电路”&#xff0c;实现3.3V电压域与5V电压域间的双向通讯 基础知识 三极管是电流控制型器件…

Kotlin程序设计(二)面向对象

Kotlin程序设计中级篇 我们在前面已经学习了Kotlin程序设计的基础篇&#xff0c;本章我们将继续介绍更多Kotlin特性&#xff0c;以及面向对象编程。 函数 其实函数我们在一开始就在使用了&#xff1a; fun main() {println("Hello World") }我们程序的入口点就是…

NLP论文阅读记录 - 2021 | WOS 抽象文本摘要:使用词义消歧和语义内容泛化增强序列到序列模型

文章目录 前言0、论文摘要一、Introduction二.前提三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Abstractive Text Summarization: Enhancing Sequen…

【JAVA】哪些集合类是线程安全的

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 Vector&#xff1a; HashTable&#xff1a; Collections.synchronizedList()、Collections.synchronizedSet()、Collections.syn…

【标准解读】物联网安全的系统回顾

1 引言 内容提要&#xff1a;物联网&#xff08;IoT&#xff09;包括嵌入传感器、软件和数据处理技术的物理对象网络&#xff0c;这些物理对象可以通过互联网与其他设备和系统建立连接并交换数据。物联网设备被融入到各种产品中&#xff0c;从普通的家庭用品到复杂的工业电器。…

基于Java SSM框架实现体育竞赛成绩管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现体育竞赛成绩管理系统演示 摘要 体育竞赛是各种体育体育项目比赛的总称。是在裁判员的主持下&#xff0c;按统一的规则要求&#xff0c;组织与实施的体育员个体或体育队之间的竞技较量&#xff0c;是竞技体育与社会发生关联&#xff0c;并作用于社会的媒…

解决AttributeError: module ‘cv2’ has no attribute ‘Stitcher_create’报错

这里其实就是opencv-python版本问题 图像拼接 stitch类的使用 OpenCV的函数为&#xff1a;cv2.createStitcher&#xff08;OpenCV 3.x&#xff09;和cv2.Stitcher_create&#xff08;OpenCV 4&#xff09;函数。 不同的opencv版本对应了不同的使用方法&#xff0c;否则会报错…

数据在AI任务中的决定性作用:以图像分类为例

人工智能的学习之路非常漫长&#xff0c;不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心&#xff0c;我为大家整理了一份600多G的学习资源&#xff0c;基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

LeetCode 589. N 叉树的前序遍历

589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔&#xff08;请参见示例&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [1,nul…

训练AI模型:寻找最优参数a和b

人工智能的学习之路非常漫长&#xff0c;不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心&#xff0c;我为大家整理了一份600多G的学习资源&#xff0c;基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

基于Java SSM框架实现企业车辆管理系统项目【项目源码】

基于java的SSM框架实现企业车辆管理系统演示 JSP技术 JSP技术本身是一种脚本语言&#xff0c;但它的功能是十分强大的&#xff0c;因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时&#xff0c;它可以使显示逻辑和内容分开&#xff0c;这就极大的方便了运动员的需求…

centos下系统全局检测工具dstat使用

目录 一&#xff1a;没有需要安装 二&#xff1a;dstat命令参数 三、监测界面各参数含义&#xff08;部分&#xff09; 四、dstat的高级用法 一&#xff1a;没有需要安装 yum install dstat 二&#xff1a;dstat命令参数 有默认选项&#xff0c;执行dstat命令不加任何参数…

街机模拟游戏逆向工程(HACKROM)教程:[0]工具

街机hack&#xff0c;从早期的街霸-降龙版 到后期对各种街机的各种改动版本 这些成果&#xff0c;就是对街机游戏的代码进行逆向分析的结果。对于大部份街机游戏&#xff0c;是基于摩托罗拉68000的CPU&#xff0c;使用的是一套特别的汇编指令集。 一、MAME下载 我们想要对游戏…

宝塔面板安装MySQL8数据库

第一步&#xff1a;搜索mysql 第二步: 点击安装 我这里选择安装8版本 第三步&#xff1a;给宝塔配置mysql防火墙 第四步&#xff1a;修改数据库密码 第五步&#xff1a;想要使用navicat连接 需要修改root的权限 &#xff08;1&#xff09;使用secureCRT先登录mysql (2) 输入u…

【用法总结】无障碍AccessibilityService

一、背景 本文仅用于做学习总结&#xff0c;转换成自己的理解&#xff0c;方便需要时快速查阅&#xff0c;深入研究可以去官网了解更多&#xff1a;官网链接点这里 之前对接AI语音功能时&#xff0c;发现有些按钮&#xff08;或文本&#xff09;在我没有主动注册唤醒词场景…

Minio安装及整合SpringBoot

一. MinIO概述 官网地址&#xff1a;https://minio.org.cn MinIO是一款基于Apache License v2.0开源协议的分布式文件系统&#xff08;或者叫对象存储服务&#xff09;&#xff0c;可以做为云存储的解决方案用来保存海量的图片、视频、文档等。由于采用Golang实现&#xff0c;服…

细说JavaScript语句详解

一、顺序结构 二、表达式语句 三、声明语句 四、条件语句 1、if语句 2、if…else语句 3、else if语句 4、switch语句 五、循环语句 1、while循环 2、do… while循环 3、for循环 4、for…in循环 六、跳出语句 1、label语句 2、break语句 3、continue语句

对闭包的理解

概念&#xff1a; 一个函数对周围状态的引用捆绑在一起&#xff0c;闭包让开发者可以从内部函数访问外部 函数的作用域 简单理解&#xff1a;闭包 内层函数 外层函数的变量 一个函数对周围状态的引用捆绑在一起&#xff0c;闭包让开发者可以从内部函数访问外部 函数的作…

数据结构——顺序二叉树——堆

1.树的相关概念 在介绍二叉树之前&#xff0c;我们首先要明确树是什么。 树用我们的通常认识来判断应该是一种植物&#xff0c;从根向上生长&#xff0c;分出许多的树枝并长出叶子。对于数据结构中的树而言&#xff0c;其结构也正是从树的特征中剥离出来的。树结构是一种非线性…