Elasticsearch高级使用-自动补全
一、概念
注意事项
为了避免搜索同音字,搜索时不要使用拼音分词器
二、拼音分词器
官网https://github.com/medcl/elasticsearch-analysis-pinyin
安装
注意与elasticsearch的对应关系
下载
我们的ES使用了7.15.1,所以我们使用master分支代码。打开官网,下载master分支的zip代码
https://codeload.github.com/medcl/elasticsearch-analysis-pinyin/zip/refs/heads/master
解压
unzip elasticsearch-analysis-pinyin-master.zip
编译
主要修改pom.xml中ES的版本号,需要对应你安装的es的版本
<properties><elasticsearch.version>7.15.1</elasticsearch.version>...
</properties>
- 方法一 直接mvn package
注意jdk要1.8以上,打开cmd,cd到解压后的文件夹目录
mvn package
- 方法二 在idea中编译
打包好了过后,当前目录多了一个target文件夹,点击进入就会在releases下面生成zip安装包
配置ES
在releases文件夹下面,解压zip包
unzip elasticsearch-analysis-pinyin-7.15.1.zip
# 重命名文件py
mv elasticsearch-analysis-pinyin-7.15.1.zip py
将文件移动到ES的plugins目录
因为我的es是docker安装,所以目录是:/usr/local/elasticsearch/plugins
重启ES
docker restart elasticsearch
查看启动日志
切记分词器的版本号一定要与ES的安装版本号一一致
体验效果
# 测试拼音分词器
POST /_analyze
{"text": ["如家酒店还不错"],"analyzer": "pinyin"
}
三、自定义分词器
使用了拼音分词器之后,导致汉字分词没有了,大部分场景还是需要汉字分词,包括内容有表情符号的。所以需要自定义分词器;
概念
如何创建自定义分词器
- 创建索引库时,在settings中配置,可以包含三部分
- character filter
- tokenizer
- filter
在创建索引库时,通过settings来配置自定义的analyzer(分词器)
filter中属性可以参照官网
创建自定义分词器
# 自定义分词器
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"}}}
}
测试
# 测试自定义分词器
POST /test/_analyze
{"text": ["如家酒店还不错"],"analyzer": "my_analyzer"
}
测试demo
准备数据
# 插入测试文档
POST /test/_doc/1
{"id":1,"name":"狮子"
}POST /test/_doc/2
{"id":2,"name":"虱子"
}
测试搜索
GET /test/_search
{"query":{"match": {"name": "shizi"}}
}
问题思考,当我们搜索狮子时,虱子也被搜出,为了避免搜索同音字,搜索时不要使用拼音分词器
原因如下:
解决办法
在创建倒排索引时应该用my_analyzer分词器;字段在搜索时应该使用ik_smart分词器
先删除索引,在创建
# 先删除
DELETE /test
# 自定义分词器
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"}}}
}
然后重新插入之前的1,2文档
再次搜索如下
四、自动补全查询
对字段的要求
- 类型是completion类型
- 字段值是多词条的数组
completion suggester查询
示例
# 自动补全的索引库
PUT test2
{"mappings": {"properties": {"title":{"type": "completion"}}}
}# 示例数据
# 插入测试文档
POST /test2/_doc
{"title":["Sony","WH-1000XM3"]
}POST /test2/_doc
{"title":["SK-II","PITERA"]
}POST /test2/_doc
{"title":["Nintendo","switch"]
}# 自动补全查询
GET /test2/_search
{"suggest": {"titleSuggest": {"text": "s","completion": {"field": "title","skip_duplicates":true,"size":10}}}
}
效果
Elasticsearch高级使用-自动补全相关推荐
- SpringCloud(9)— Elasticsearch聚合和自动补全
SpringCloud(9)- Elasticsearch聚合和自动补全 一 数据聚合 1.聚合的分类 聚合(aggregations)可以实现对文档数据的统计,分析,运算.常见的聚合有三种: 1.桶 ...
- ES系列、Elasticsearch Suggester API(自动补全)
1.概念 1.1 补全api主要分为四类 Term Suggester(纠错补全,输入错误的情况下补全正确的单词) Phrase Suggester(自动补全短语,输入一个单词补全整个短语) Comp ...
- Elasticsearch 分布式搜索引擎 -- 自动补全(拼音分词器、自定义分词器、自动补全查询、实现搜索框自动补全)
文章目录 1. 自动补全 1.1 拼音分词器 1.2.1 自定义分词器 1.2.2 小结 1.2 自动补全 1.3 实现酒店搜索框自动补全 1.3.1 修改酒店映射结构 1.3.2 修改HotelDo ...
- Elasticsearch实战-实现Hotel索引库的自动补全、拼音搜索功能
一.实现思路 1.修改hotel索引库结构,设置自定义拼音分词器 2.修改索引库的name.all字段,使用自定义分词器 3.索引库添加一个新字段suggestion,类型为completion类型, ...
- ElasticSearch高级篇(数据聚和、自动补全、数据同步、分片集群)
文章目录 1.数据聚合 1.1.聚合的种类 1.2.DSL实现聚合 1.2.1.Bucket聚合语法 1.2.2.聚合结果排序 1.2.3.限定聚合范围 1.2.4.Metric聚合语法 1.2.5. ...
- elasticsearch搜素关键字自动补全(suggest)
elasticsearch搜素关键字自动补全顾名思义 在搜索框搜索时能有提示列表可供选择. 最终效果如下: 该搜索优化功能是elasticsearch自带的即suggest,suggest即存储一个词 ...
- ElasticSearch从入门到精通--第七话(自动补全、拼音分词器、自定义分词、数据同步方案)
ElasticSearch从入门到精通–第七话(自动补全.拼音分词器.自定义分词.数据同步方案) 使用拼音分词 可以引入elasticsearch的拼音分词插件,地址:https://github.c ...
- Elasticsearch生产实战(ik分词器、拼音分词、自动补全、自动纠错)
目录 一.IK分词器 1.IK分词器介绍 2.安装 3.使用 4.自定义词库 二.拼音分词器 1.拼音分词器介绍 2.安装 三.自动补全 1.效果演示 2.实战 四.自动纠错 1.场景描述 2.DSL ...
- [ElasticSearch]Suggest查询建议(自动补全纠错)
1) 概念 查询建议,能够为用户提供良好的使用体验.主要包括: 拼写检查(纠错) 自动建议查询词(自动补全) 2) Suggest种类及参数 2.1 Term Suggester Te ...
最新文章
- windows安装redis数据库
- linux touch命令 新建文件 更新文件时间
- 大批量插入数据如何优化
- java swing jbutton_Java 反射
- 深度 | 一篇文章带你进入无监督学习:从基本概念到四种实现模型(附论文)
- Unfair contest(个人做法)
- 2020年快手母婴生态报告
- Command对象应用--增加问卷调查
- 图像的连通域标记算法及工具介绍
- MEncoder的基础用法—6.2. 选择输入文件或设备
- Android四大组件每个组件的作用?它们都可以开启多进程吗?
- 如何操作才能实现音频合并无缝衔接?只要掌握这个技巧
- java sdk qq登录授权_社会化登录分享-QQ SDK接入
- ArduinoUNO实战-第六章-电位器实验
- c语言向量乘法,运用C语言实现向量积
- html外联php,html如何添加css样式?行内式、内嵌式、外联式的优缺点
- Python实现Iris数据集(鸢尾花卉数据集)meanshift聚类
- This is probably not a problem with npm. There is likely additional logging output above.
- 思维方式-《终身成长》书中的精髓:决定人与人之间巨大差距的,是你的思维模式。
- 抖音二面:为什么模块循环依赖不会死循环?CommonJS和ES Module的处理不同?
热门文章
- (java)输入一个正整数n(1≤n≤6)和n阶方阵A,交换方阵A中的最大值与最小值位置。假定方阵A中的最大值与最小值都唯一。
- SQL Server 数据库设计规范
- 镜像与复制有什么区别_开发者如何快速精简容器云镜像?| 技术头条
- matlab dae,matlab解DAE遇到的问题
- 怎样将文件后缀名统一重命名并为大写字母
- 浅谈科研中作中的心得体会-讲座心得
- 具有多个项目的可访问拖放
- 【详细图文教程】通过UNiDAYS进行Apple教育优惠认证
- 600多万行的代码,苦撑12年的“乱项目”长这样
- 2021校招京东物流新锐之星校招笔试面试总结