前言

现在来重新建立索引,然后实现搜索提示。

建立索引并重新抽取数据

PUT /articles2
{"mappings" : {"doc" : {"properties" : {"content" : {"type" : "text","fields" : {"suggest" : {"type" : "completion","analyzer": "ik_max_word"},"keyword" : {"type" : "keyword","ignore_above" : 256}}},"id" : {"type" : "long"},"title" : {"type" : "text","fields" : {"suggest" : {"type" : "completion","analyzer": "ik_max_word"},"keyword" : {"type" : "keyword","ignore_above" : 256}}}}}}
}

一共有三个字段(id,title,content),其中title,content是需要实现搜索建议的字段,所以进行了相关分词器的配置:

结果为:

使用了基础的ik分词器,来尝试一下效果。

尝试查询




发现在对中文进行建议时,往往结果为空。
经过分析,感觉时ik分词器不能正确处理中文的原因。通过查资料发现,有人说:

用好Completion
Sugester并不是一件容易的事,实际应用开发过程中,需要根据数据特性和业务需要,灵活搭配analyzer和mapping参数,反复调试才可能获得理想的补全效果。

使用pinyin分词器和ik分词器综合,进行尝试

之前了解到pinyin分词器可以进行相关的配置,然后实现不同的结果,现在来试一下
找到了以下的资料:

https://blog.csdn.net/baifanwudi/article/details/88662561
https://blog.csdn.net/TerryLam2010/article/details/105972057

这两篇博客使用了ik分词和拼音分词的综合使用,我来尝试一下
(1)首先看下ik分词器和pinyin分词器的不同的效果
pinyin分词器

ik分词器

(2)参照博客,为自己的数据重新建立一个索引
博客中ik分词器和pinyin分词器,综合使用配置,实现了五种不同的分词效果

我模仿他的配置建立自己的索引:
还是id,title,content三个字段,其中title和content进行了重点的suggest的分词配置

PUT /articles5/
{"settings": {"index": {"analysis": {"analyzer": {"pinyin_analyzer": {"tokenizer": "s-pinyin"},"first_py_letter_analyzer": {"tokenizer": "first_py_letter"},"full_pinyin_letter_analyzer": {"tokenizer": "full_pinyin_letter"}},"tokenizer": {"s-pinyin": {"keep_joined_full_pinyin": "true","keep_first_letter": "true","keep_separate_first_letter": "false","lowercase": "true","type": "pinyin","limit_first_letter_length": "16","keep_original": "true","keep_full_pinyin": "true","keep_none_chinese_in_joined_full_pinyin": "true"},"first_py_letter": {"type": "pinyin","keep_first_letter": true,"keep_full_pinyin": false,"keep_original": false,"limit_first_letter_length": 16,"lowercase": true,"trim_whitespace": true,"keep_none_chinese_in_first_letter": false,"none_chinese_pinyin_tokenize": false,"keep_none_chinese": true,"keep_none_chinese_in_joined_full_pinyin": true},"full_pinyin_letter": {"type": "pinyin","keep_separate_first_letter": false,"keep_full_pinyin": false,"keep_original": false,"limit_first_letter_length": 16,"lowercase": true,"keep_first_letter": false,"keep_none_chinese_in_first_letter": false,"none_chinese_pinyin_tokenize": false,"keep_none_chinese": true,"keep_joined_full_pinyin": true,"keep_none_chinese_in_joined_full_pinyin": true}}}}},"mappings": {"doc": {"properties": {"id" : {"type" : "long"},"content": {"type": "text","analyzer": "ik_max_word","fields": {"s-pinyin": {"type": "completion","analyzer": "pinyin_analyzer"},"keyword-pinyin": {"type": "completion","analyzer": "full_pinyin_letter_analyzer"},"keyword-first-py": {"type": "completion","analyzer": "first_py_letter_analyzer"},"ik-word":{"type": "completion","analyzer": "ik_max_word"},"standard-word":{"type": "completion","analyzer": "standard"}}},"title": {"type": "text","analyzer": "ik_max_word","fields": {"s-pinyin": {"type": "completion","analyzer": "pinyin_analyzer"},"keyword-pinyin": {"type": "completion","analyzer": "full_pinyin_letter_analyzer"},"keyword-first-py": {"type": "completion","analyzer": "first_py_letter_analyzer"},"ik-word":{"type": "completion","analyzer": "ik_max_word"},"standard-word":{"type": "completion","analyzer": "standard"}}}}}}
}

在建立索引,抽取数据之后,尝试着查询以下:


用不同的分词策略会有不同的返回,可以从中筛选出想要的结果,这样比只是用ik分词器得到的结果要好了不少

**总结

结果是有5个,使用时不能都使用,需要根据不同的情况使用
keyword_pinyin一般来说查询最齐全,用的是拼音的比对而不是单纯的文字
ik-word->s-pinyin->keyword_pinyin->keyword_first_py->standard-word
偏差越大的应当放在越后,用于补全等操作。
1. 全中文词汇 采用ik-word ik分词 和standard 查询。
2. 含有英文和中文的 采用 s-pinyin keyword_pinyin
3. 全英文的就使用拼音
**

创新实训(46)——基于ElasticSearch的Completion Suggest实现搜索提示相关推荐

  1. ElasticSearch教程——基于completion suggest实现搜索提示

    ElasticSearch汇总请查看:ElasticSearch教程--汇总篇 前言 completion suggest也叫自动完成,搜索推荐,搜索提示 ,一般多叫自动完成,即auto comple ...

  2. es基于completion suggest实现搜索提示

    在之前的某一篇中,我们使用了es的前缀搜索,获得了文档根据前缀进行匹配的效果,如下图所示, 下面说说在es中的另一种实现搜索提示的功能,基于completion suggest 进行实现,其在实际应用 ...

  3. 创新实训个人记录 : 个人工作总结

    创新实训个人记录 : 个人工作总结 分条目.分进度总结个人工作 阅读书籍(6.8-6.18) 近似算法设计(6.19-6.27) 程序验证(6.28-7.1) 工作难点 接触近似算法领域,学习新知识 ...

  4. 创新实训团队记录:为BR-MTC问题设计一个近似算法

    创新实训团队记录 : 为BR-MTC问题设计近似算法 阅读书籍和论文 近似算法设计思路变化总结 算法框架 改变初始顶点集 继续添加路径,作为新的初始顶点集 程序验证 近似解与最优解存在差距&& ...

  5. 创新实训(2)-Scrapy 学习

    创新实训(2)-Scrapy 学习 参考资料:Scrapy 0.25 文档 1.Scrapy简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理 ...

  6. 山东大学软件学院项目实训-创新实训-SDUMeeting(一)

    山东大学软件学院项目实训-创新实训-SDUMeeting(一) 一.前言: 这个项目是山东大学视频会议项目,这个项目基于webrtc构建多人视频会议系统,我负责视频会议客户端及服务端安全防护,这个专栏 ...

  7. 山东大学软件学院项目实训-创新实训-SDUMeeting(六)

    山东大学软件学院项目实训-创新实训-SDUMeeting(六) 端对端加密与密钥交换 端到端加密(end-to-end),是一种只有参与通讯的用户可以读取信息的通信系统.它可以防止潜在的窃听者--包括 ...

  8. 创新实训个人记录:approximation factor, maximum matchingvertex cover

    创新实训个人记录:approximation factor, maximum matching&&vertex cover approximation factor(近似比) maxi ...

  9. 创新实训个人记录:P versus NP

    创新实训个人记录:P versus NP computation&&computable&& computational efficiency 一些符号 decision ...

最新文章

  1. 2021年大数据Spark(二十七):SparkSQL案例一花式查询和案例二WordCount
  2. android 5.0 9300,三星Android5.0升级名单曝光 S2止步4.2
  3. 明确了!导师再也不能让研究生干这种事!
  4. Add Binary
  5. node 获取表单数据 为空_像声明类型一样写表单——基础功能
  6. [Swift]LeetCode1017. 负二进制转换 | Convert to Base -2
  7. TCPIP协议卷2之io中断
  8. LiveRTMP之MP4文件进行rtmp点播直播推送(三)
  9. 超分辨网络SRCNN的Pytorch实现
  10. C语言的酒店客房管理系统
  11. java学籍管理系统部分代码_java学籍管理系统源代码
  12. python 当天零点的时间戳
  13. 【*如何捱过寂寥萧瑟的秋季*】
  14. 基于C++实现考试报名系统
  15. 如何快速绘制一个等边三角形呢?
  16. 基于VS+Opencv2.4.10的微信跳一跳辅助工具
  17. 138个医共体!紧密型县域医共体建设和改革,这个省这么干
  18. 社招和校招有什么不同?阿里美团等大厂 JAVA 社招面经分享
  19. linux cadaver 命令,(个人学习Linux经历)文本命令
  20. 三级公立医院绩效考核操作手册

热门文章

  1. pytorch应用之——纸币识别(一)
  2. java中集合的分类以及集合的选择
  3. 百事正用AI种土豆,连削皮算法都搞上了
  4. dax和m的区别_德国股票指数DAX, MDAX与TecDAX的区别是什么?
  5. mysql icp(Index Condition Pushdown) using index condition
  6. 2017京东春招C/C++编程题(1)——站队
  7. 福建力得温控器_福建力得干变温控器LD-B10-10D、LD-B10-10F、LD-B10-10E系列高精度变压器温度控制器...
  8. 前端-----之-----轮播
  9. 利用傅里叶变换获取低频和高频部分图像
  10. 暗原色先验图像去雾算法研究_先验算法