官网: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());}}

拼音分词器_自动补全相关推荐

  1. Elasticsearch 分布式搜索引擎 -- 自动补全(拼音分词器、自定义分词器、自动补全查询、实现搜索框自动补全)

    文章目录 1. 自动补全 1.1 拼音分词器 1.2.1 自定义分词器 1.2.2 小结 1.2 自动补全 1.3 实现酒店搜索框自动补全 1.3.1 修改酒店映射结构 1.3.2 修改HotelDo ...

  2. CentOS安装Elasticsearch_IK分词器拼音分词器_部署kibana_部署es集群

    CentOS安装Elasticsearch_IK分词器_部署kibana_部署es集群 一.部署单点es ①:创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联.这里先 ...

  3. java 自动封装_自动补全的java封装

    原来我做自动补全的时候都是需要什么直接返回什么,不能再返回其他的信息.但是看到经理封装的以后,情况变了(可以返回很多信息了); 参考代码: String sql = "select kh.k ...

  4. Elasticsearch——分布式搜索引擎01(索引库、文档、RestAPI、RestClient、拼音分词器、IK分词器)

    Elasticsearch--分布式搜索引擎01(索引库.文档.RestAPI.RestClient.拼音分词器.IK分词器) 一.初识 elesticsearch 1.1 简介 1.2 倒排索引(重 ...

  5. ElasticSearch从入门到精通--第七话(自动补全、拼音分词器、自定义分词、数据同步方案)

    ElasticSearch从入门到精通–第七话(自动补全.拼音分词器.自定义分词.数据同步方案) 使用拼音分词 可以引入elasticsearch的拼音分词插件,地址:https://github.c ...

  6. Elasticsearch生产实战(ik分词器、拼音分词、自动补全、自动纠错)

    目录 一.IK分词器 1.IK分词器介绍 2.安装 3.使用 4.自定义词库 二.拼音分词器 1.拼音分词器介绍 2.安装 三.自动补全 1.效果演示 2.实战 四.自动纠错 1.场景描述 2.DSL ...

  7. 微服务框架 SpringCloud微服务架构 27 自动补全 27.2 自定义分词器

    微服务框架 [SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务] SpringCloud微服务 ...

  8. Elasticsearch实战-实现Hotel索引库的自动补全、拼音搜索功能

    一.实现思路 1.修改hotel索引库结构,设置自定义拼音分词器 2.修改索引库的name.all字段,使用自定义分词器 3.索引库添加一个新字段suggestion,类型为completion类型, ...

  9. ES 7.X 做类百度搜索,进行搜索自动补全和热搜词及拼音功能实现

    文章目录 前言 一.如何使用ES做类似百度的检索? 二.全文检索自动补齐 1.创建索引 2.添加数据 3.高级检索 三 热搜词 1.思路 2.DSL语句 3.java代码实现 四 拼音补全 1.DSL ...

  10. notepadpython插件_用NotePad++写python及自动补全

    以前一直用eclipse+pydev写python,但是eclipse启动速度实在太悲催了.后来有人推荐用Notepad++.NP确实不错,体积小,绿色且启动速度极快.支持的语言种类也很多,插件巨多, ...

最新文章

  1. 3——PHP 简单运算符的使用
  2. AutoCAD 2013
  3. KubeSphere 3.1.0 GA:混合多云走向边缘,让应用无处不在
  4. 【渝粤教育】广东开放大学 财政学 形成性考核 (43)
  5. 【Python】pdf2image模块+poppler将PDF转换为图片
  6. Github 上近万星的深度学习模型大全!
  7. java 反射data类型_java反射机制系列之初识Java Reflection
  8. Jquery技巧:使用ajax技术提交表单数据
  9. Monto Carlo估计动作价值(action values)
  10. Activiti6驳回上一节点
  11. Unity3d 局域网小游戏DEMO学习
  12. matlab把图例放在左边,如何将图例放在p之外
  13. css引用 svg图标库,svg 图标文件引入小技巧
  14. 如何在word中打印对勾和叉
  15. 计算机二级多少人优秀,计算机二级各科通过率是多少
  16. phpstudy构建数据库
  17. Go发送Gmail邮件
  18. 转载》互联网中七种武器维护移动安全
  19. icloud电子邮件服务器,如何使用 iCloud 电子邮件地址别名收发邮件?
  20. 6-8 简单阶乘计算(10 分) 本题要求实现一个计算非负整数阶乘的简单函数。

热门文章

  1. 几种统计图表的作用和区别
  2. Python——Dict类型
  3. 【IoT】产品设计之商业模式分析:一篇文章九个维度,带你认知小米的商业模式
  4. 微信扫描打开APP下载链接提示代码案例源码
  5. python中将字符变为大写_python3.4.3将汉字转换为大写拼音首字母
  6. optim优化器的使用
  7. centos usb转网口_CentOS 6.5安装qf9700 USB网卡驱动
  8. delphi第三方组件总述
  9. 很好的--张量(Tensor)的技术以及它在不同场景中的应用--转载贪心科技
  10. 计算机系统操作权限,电脑修改系统时间提示没有操作权限的解决办法