拼音分词器_自动补全
官网:https://github.com/medcl/elasticsearch-analysis-pinyin
拼音分词器基本使用
POST _analyze
{"text": ["如家酒店还不错"],"analyzer": "pinyin"
}
elasticsearch中分词器(analyzer)的组成包含三部分:
- character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符
- tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词,还有ik_smart
- tokenizer filter:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等
流程如下
自定义分词器
我们可以在创建索引库时,通过settings来配置自定义的analyzer(分词器)
// 自定义拼音分词器
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": {"teyp": "text","analyzer": "my_analyzer"}}}
}
测试:
POST /test/_analyze
{"text": ["如家酒店还不错"],"analyzer": "my_analyzer" //自定义分词器的名称
}
拼音分词器适合在创建倒排索引的时候使用,但不能在搜索的时候使用
原因:当在搜索时它会自动将你的中文转为拼音去搜索,因而得到很多同音不同意的词
因此字段在创建倒排索引时应该用my_analyzer分词器;字段在搜索时应该使用ik_smart分词器
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" //搜索时使用}}}
}
DSL自动补全查询
elasticsearch提供了Completion Suggester查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。为了提高补全查询的效率,对于文档中字段的类型有一些约束:
- 参与补全查询的字段必须是completion类型。
- 字段的内容一般是用来补全的多个词条形成的数组。
创建自动补全索引库
PUT test2
{"mappings": {"properties": {"title":{ //字段名"type": "completion"}}}
}
示例数据
POST test/_doc
{"title": ["Sony", "WH-1000XM3"]
}
POST test/_doc
{"title": ["SK-II", "PITERA"]
}
POST test/_doc
{"title": ["Nintendo", "switch"]
}
自动补全查询语句,例
POST /test/_search
{"suggest": {"title_suggest": {"text": "s", // 关键字"completion": {"field": "title", // 补全字段"skip_duplicates": true, // 跳过重复的"size": 10 // 获取前10条结果}}}
}
RestClient实现自动补全查询
java的RestClient与DSL对应关系
RestClient自动补全结果解析
@Testvoid testsuggest() throws IOException {SearchRequest request = new SearchRequest("hotel");//DSLrequest.source().suggest(new SuggestBuilder().addSuggestion("suggestions",//给自动查询起名字SuggestBuilders.completionSuggestion("suggestion")//字段.prefix("bj")//自动补全的关键字.skipDuplicates(true)//去除重复值.size(10)//结果数量));SearchResponse response = client.search(request, RequestOptions.DEFAULT);//解析结果Suggest suggest = response.getSuggest();//根据补全查询名称,获取补全结果CompletionSuggestion suggestion = suggest.getSuggestion("suggestions");//获取optionsList<CompletionSuggestion.Entry.Option> options = suggestion.getOptions();//遍历options得到每个具体的结果for (CompletionSuggestion.Entry.Option option : options) {//打印text补全值System.out.println(option.getText().toString());}}
拼音分词器_自动补全相关推荐
- Elasticsearch 分布式搜索引擎 -- 自动补全(拼音分词器、自定义分词器、自动补全查询、实现搜索框自动补全)
文章目录 1. 自动补全 1.1 拼音分词器 1.2.1 自定义分词器 1.2.2 小结 1.2 自动补全 1.3 实现酒店搜索框自动补全 1.3.1 修改酒店映射结构 1.3.2 修改HotelDo ...
- CentOS安装Elasticsearch_IK分词器拼音分词器_部署kibana_部署es集群
CentOS安装Elasticsearch_IK分词器_部署kibana_部署es集群 一.部署单点es ①:创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联.这里先 ...
- java 自动封装_自动补全的java封装
原来我做自动补全的时候都是需要什么直接返回什么,不能再返回其他的信息.但是看到经理封装的以后,情况变了(可以返回很多信息了); 参考代码: String sql = "select kh.k ...
- Elasticsearch——分布式搜索引擎01(索引库、文档、RestAPI、RestClient、拼音分词器、IK分词器)
Elasticsearch--分布式搜索引擎01(索引库.文档.RestAPI.RestClient.拼音分词器.IK分词器) 一.初识 elesticsearch 1.1 简介 1.2 倒排索引(重 ...
- ElasticSearch从入门到精通--第七话(自动补全、拼音分词器、自定义分词、数据同步方案)
ElasticSearch从入门到精通–第七话(自动补全.拼音分词器.自定义分词.数据同步方案) 使用拼音分词 可以引入elasticsearch的拼音分词插件,地址:https://github.c ...
- Elasticsearch生产实战(ik分词器、拼音分词、自动补全、自动纠错)
目录 一.IK分词器 1.IK分词器介绍 2.安装 3.使用 4.自定义词库 二.拼音分词器 1.拼音分词器介绍 2.安装 三.自动补全 1.效果演示 2.实战 四.自动纠错 1.场景描述 2.DSL ...
- 微服务框架 SpringCloud微服务架构 27 自动补全 27.2 自定义分词器
微服务框架 [SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务] SpringCloud微服务 ...
- Elasticsearch实战-实现Hotel索引库的自动补全、拼音搜索功能
一.实现思路 1.修改hotel索引库结构,设置自定义拼音分词器 2.修改索引库的name.all字段,使用自定义分词器 3.索引库添加一个新字段suggestion,类型为completion类型, ...
- ES 7.X 做类百度搜索,进行搜索自动补全和热搜词及拼音功能实现
文章目录 前言 一.如何使用ES做类似百度的检索? 二.全文检索自动补齐 1.创建索引 2.添加数据 3.高级检索 三 热搜词 1.思路 2.DSL语句 3.java代码实现 四 拼音补全 1.DSL ...
- notepadpython插件_用NotePad++写python及自动补全
以前一直用eclipse+pydev写python,但是eclipse启动速度实在太悲催了.后来有人推荐用Notepad++.NP确实不错,体积小,绿色且启动速度极快.支持的语言种类也很多,插件巨多, ...
最新文章
- 3——PHP 简单运算符的使用
- AutoCAD 2013
- KubeSphere 3.1.0 GA:混合多云走向边缘,让应用无处不在
- 【渝粤教育】广东开放大学 财政学 形成性考核 (43)
- 【Python】pdf2image模块+poppler将PDF转换为图片
- Github 上近万星的深度学习模型大全!
- java 反射data类型_java反射机制系列之初识Java Reflection
- Jquery技巧:使用ajax技术提交表单数据
- Monto Carlo估计动作价值(action values)
- Activiti6驳回上一节点
- Unity3d 局域网小游戏DEMO学习
- matlab把图例放在左边,如何将图例放在p之外
- css引用 svg图标库,svg 图标文件引入小技巧
- 如何在word中打印对勾和叉
- 计算机二级多少人优秀,计算机二级各科通过率是多少
- phpstudy构建数据库
- Go发送Gmail邮件
- 转载》互联网中七种武器维护移动安全
- icloud电子邮件服务器,如何使用 iCloud 电子邮件地址别名收发邮件?
- 6-8 简单阶乘计算(10 分) 本题要求实现一个计算非负整数阶乘的简单函数。
热门文章
- 几种统计图表的作用和区别
- Python——Dict类型
- 【IoT】产品设计之商业模式分析:一篇文章九个维度,带你认知小米的商业模式
- 微信扫描打开APP下载链接提示代码案例源码
- python中将字符变为大写_python3.4.3将汉字转换为大写拼音首字母
- optim优化器的使用
- centos usb转网口_CentOS 6.5安装qf9700 USB网卡驱动
- delphi第三方组件总述
- 很好的--张量(Tensor)的技术以及它在不同场景中的应用--转载贪心科技
- 计算机系统操作权限,电脑修改系统时间提示没有操作权限的解决办法