自动补全和集群部署ElasticSearch

  • 1 自动补全
    • 1.1 拼音分词器
    • 1.2 自定义分词器
    • 1.3 自动补全查询
  • 2 JavaAPI实现
  • 3 集群

1 自动补全

1.1 拼音分词器

要实现根据字母做补全,就必须对文档按照拼音分词。在GitHub上恰好有elasticsearch的拼音分词插件。地址:github上的拼音分词器下载

测试用法

POST /_analyze
{"text": "如家酒店还不错","analyzer": "pinyin"
}

1.2 自定义分词器

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

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

  • character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符
  • tokenizer:将文本按照一定的规则切割成词条(term)。例如ik_smart
  • tokenizer filter:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等

声明自定义分词器的语法如下:

PUT /test
{"settings": {"analysis": {"analyzer": { // 自定义分词器"my_analyzer": {  // 分词器名称"tokenizer": "ik_max_word","filter": "py"}},"filter": { // 自定义tokenizer filter"py": { // 过滤器名称"type": "pinyin", // 过滤器类型,这里是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"  //搜索时使用中午分词器}}}
}

注意:拼音分词器适合在创建倒排索引时使用,不要在搜索的时候使用

总结:
如何使用拼音分词器?

  • ①下载pinyin分词器

  • ②解压并放到elasticsearch的plugin目录

  • ③重启es容器即可

如何自定义分词器?

  • ①创建索引库时,在settings中配置,可以包含三部分:

  • character filter

  • tokenizer

  • filter

拼音分词器注意事项有哪些?

  • 为了避免搜索到同音字(按照拼音搜索到同音字),搜索时不要使用拼音分词器

1.3 自动补全查询

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

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

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

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

// 创建索引库
PUT test1
{"mappings": {"properties": {"title":{"type": "completion"}}}
}

然后插入下面的数据:

// 示例数据
POST test1/_doc
{"title": ["Sony", "WH-1000XM3"]
}
POST test1/_doc
{"title": ["SK-II", "PITERA"]
}
POST test1/_doc
{"title": ["Nintendo", "switch"]
}

查询的DSL语句如下:

// 自动补全查询
GET /test1/_search
{"suggest": {"title_suggest": {"text": "s", // 关键字"completion": {"field": "title", // 补全查询的字段"skip_duplicates": true, // 跳过重复的"size": 10 // 获取前10条结果}}}
}

2 JavaAPI实现

准备工作,索引库创建

// 酒店数据索引库
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"}}}
}

测试数据:
后续上传

java代码实现

public List<String> getSuggestions(String prefix) {try {//1.准备请求SearchRequest request = new SearchRequest("hotel");//2.准备参数request.source().suggest(new SuggestBuilder().addSuggestion("suggestions",SuggestBuilders.completionSuggestion("suggestion").prefix(prefix).skipDuplicates(true).size(10)));//3.发起请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);//4.解析结果Suggest suggest = response.getSuggest();// 4.1.根据补全查询名称,获取补全结果CompletionSuggestion suggestions = suggest.getSuggestion("suggestions");// 4.2.获取optionsList<CompletionSuggestion.Entry.Option> options = suggestions.getOptions();// 4.3.遍历List<String> list = new ArrayList<>(options.size());for (CompletionSuggestion.Entry.Option option : options) {String text = option.getText().toString();list.add(text);}return list;} catch (IOException e) {throw new RuntimeException(e);}}

示例截图

解析过程截图

3 集群

暂未写

ElasticSearch的基本操作第三章相关推荐

  1. elasticsearch漫步走 - 第三章 - Elasticsearch的半生缘皮肤Kibana

    Elasticsearch的半生缘皮肤Kibana Kibana的中文网地址 最简单的安装方式 文件下载 文件上传解压 kibana配置 启动kibana 关闭kibana 还有一些重要配置 遇到过一 ...

  2. 第三章 Elasticsearch Query DSL -- 查询

    第三章 Elasticsearch Query DSL -- 查询 摘要 查询和过滤的上下文(context) 相关性得分 查询上下文 过滤上下文 示例(下面这些查询参数,后续会详述) 全文查询 in ...

  3. Elasticsearch6.8开发指南-第三章-设置Elasticsearch

    Elasticsearch6.8开发指南-第三章-设置Elasticsearch 本章简介 安装Elasticsearch 使用.zip或安装Elasticsearch.tar.gz 在Windows ...

  4. 备考全国计算机三级数据库考试+自学MySQL 第二章第三章数据库的基本操作

    第二章MySQL的安装与配置 有Windows和Linux两种版本.(个人建议:先装一个VMware虚拟机,在里面装MySQL).安装步骤自行百度,或者后期,再补发,安装文件直接下载MySQL官方文件 ...

  5. 计算机文件的含义记录在,第三章计算机基本操作.doc

    第三章计算机基本操作 一.单项选择题 1.计算机感染病毒后会产生各种现象,以下不属于病毒现象的是(www.TopS) A.文件占用的空间变大 B.发生异常蜂鸣声 C.屏幕显示异常图形 D.机内的电扇不 ...

  6. 《Hadoop权威指南》第三章 Hadoop分布式文件系统

    <Hadoop权威指南>第三章 Hadoop分布式文件系统 目录 前言 HDFS的设计 HDFS的概念 命令行接口 Hadoop文件系统 Java接口 数据流 通过distcp并行复制 注 ...

  7. 华南理工专科计算机随堂联系,华南理工大学网络教育计算机基础随堂练习第三章...

    <华南理工大学网络教育计算机基础随堂练习第三章>由会员分享,可在线阅读,更多相关<华南理工大学网络教育计算机基础随堂练习第三章(8页珍藏版)>请在人人文库网上搜索. 1.第三章 ...

  8. 第三章计算机网络,第三章-计算机网络及应用.ppt

    第三章-计算机网络及应用 第三章 计算机网络及应用 * * 第一节 计算机网络基础知识 第二节 网络基本操作 第二章计算机网络及应用 第一节 计算机网络基础知识 一.计算机网络的定义 把地理位置不同且 ...

  9. 路飞学城—Python爬虫实战密训班 第三章

    路飞学城-Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫:- 定义调度器- 定 ...

最新文章

  1. 论分层思想在各行各业的应用
  2. 深度学习 vs SLAM
  3. 第十二节 VMware View 6.0 菜鸟入门 部署和安装2008 R2 RDS服务
  4. 如何多人共同编辑_如何实现可多人协作的“在线excel”系统?
  5. windows和linux删除文件方法
  6. IText 生成页脚页码
  7. centos 安装低版本内核_Docker安装教程
  8. Spring3 MVC+Spring+Spring Jdbc实现的权限管理系统,可以控制到增删改查
  9. 学习结构[记录]类型(7) - 结构也可以有构造函数
  10. 【编程之美】java二进制实现重建
  11. 有哪些开源的 BI 工具
  12. 烦请大家支持一票,谢谢!!
  13. oracle 转chr,[Oracle]Oracle之Chr函数返回
  14. sql内外连接的区别
  15. spring tx:advice事务配置
  16. Codewars实战(一)
  17. 2.格式化输出与输入
  18. cassandra权威指南
  19. 田园综合体PPP项目规划方案(ppt)
  20. Qt平台添加OpenCV库

热门文章

  1. 计算机高新技术学什么,高新技术计算机教学利弊分析
  2. 十五天学会Autodesk Inventor,看完这一系列就够了(七),工程图纸
  3. 基于微信小程序的贵小团系统设计与实现-计算机毕业设计源码+LW文档
  4. 数采物联仪表照片抓拍AI图像识别软件使用说明
  5. ssl证书到期时间查询方法
  6. linux 安装ath9k_htc驱动
  7. 【转】苹果警告中国开发者:不要绕过APP反追踪功能
  8. Python语法学习之函数
  9. Race condition
  10. 【125】Linux 中 ps -ef|grep和ps、grep详解