背景

中文搜索很多时候都要用到pinyin搜索,基本绕不开这个插件;如搜索人名之类的;

介绍

插件github:地址

在README的最后,举的例子挺有意思;经过一系列操作之后,对刘德华建index,竟然搜liudh,刘dh,各种奇葩的搜索都能搜出来,这是为啥呢?让我们来仔细分析一下。

如官网的配置

配置analyzer

PUT /medcl3/
{"settings" : {"analysis" : {"analyzer" : {"pinyin_analyzer" : {"tokenizer" : "my_pinyin"}},"tokenizer" : {"my_pinyin" : {"type" : "pinyin","keep_first_letter":true,"keep_separate_first_letter" : true,"keep_full_pinyin" : true,"keep_original" : false,"limit_first_letter_length" : 16,"lowercase" : true}}}}
}

主要是用了分词器tokenizer:my_pinyin。
具体的设置是,
keep_first_letter: true ; 也就是会将刘德华 -> ldh
keep_seperate_first_letter: true; 将刘德华 -> ldh
keep_full_pinyin: true; 将刘德华 -> liu, de, hua

有了这些设置之后,我们发现对刘德华进行analyze:

GET /hjxtest_pinyin/_analyze
{"text": "刘德华","analyzer": "pinyin_analyzer"
}

得到结果就是上面说的这7个key

{"tokens": [{"token": "l","start_offset": 0,"end_offset": 0,"type": "word","position": 0},{"token": "liu","start_offset": 0,"end_offset": 0,"type": "word","position": 0},{"token": "ldh","start_offset": 0,"end_offset": 0,"type": "word","position": 0},{"token": "d","start_offset": 0,"end_offset": 0,"type": "word","position": 1},{"token": "de","start_offset": 0,"end_offset": 0,"type": "word","position": 1},{"token": "h","start_offset": 0,"end_offset": 0,"type": "word","position": 2},{"token": "hua","start_offset": 0,"end_offset": 0,"type": "word","position": 2}]
}

然后我们建好index,搜索liudh的时候,会先用相同的分词方法分词:

GET /hjxtest_pinyin/_analyze
{"text": "liudh","analyzer": "pinyin_analyzer"
}

分词结果

{"tokens": [{"token": "liu","start_offset": 0,"end_offset": 0,"type": "word","position": 0},{"token": "liudh","start_offset": 0,"end_offset": 0,"type": "word","position": 0},{"token": "d","start_offset": 0,"end_offset": 0,"type": "word","position": 1},{"token": "h","start_offset": 0,"end_offset": 0,"type": "word","position": 2}]
}

可见,我们牛皮的分词器,会分词出结果 liu + d + h + liudh
回顾我们建的倒排索引: liu de hua l d h ldh
搜索的时候
liu d h都能找到咱们的文档,当然就可以搜到结果了:

GET /hjxtest_pinyin/_search
{"query": {"match": {"name.pinyin": "liudh"}}
}


但是我们发现一个有意思的现象,当我们搜liudh的时候,竟然会把黄渤也搜出来,这是什么鬼?

ES pinyin 插件 拼音搜索 原理 match_phase相关推荐

  1. Lucene5学习之拼音搜索

    今天来说说拼音检索,这个功能其实还是用来提升用户体验的,别的不说,最起码避免了用户切换输入法,如果能支持中文汉语拼音简拼,那用户搜索时输入的字符更简便了,用户输入次数少了就是为了给用户使用时带来便利. ...

  2. 从零搭建 ES 搜索服务(四)拼音搜索

    一.前言 上篇介绍了 ES 的同义词搜索,使我们的搜索更强大了,然而这还远远不够,在实际使用中还可能希望搜索「fanqie」能将包含「番茄」的结果也罗列出来,这就涉及到拼音搜索了,本篇将介绍如何具体实 ...

  3. select2.js插件新增支持拼音搜索

    话不多说直奔主题 1.拼音搜索的原理: 将下拉框选项中的中文转换成汉语拼音,然后与输入的字母进行比较,如果包含则被检索出来. 2.效果: 3.在select2.js中找到matcher 方法,对此方法 ...

  4. php 获取 拼音,php根据汉字获取拼音(php基于拼音搜索实现原理)

    php根据汉字获取拼音(php基于拼音搜索实现原理) 代码一:获取字符串汉字首字母,兼容GBK和UTF-8<?php function getfirstchar($s0){ //获取单个汉字拼音 ...

  5. Simple: 一个支持中文和拼音搜索的 sqlite fts5插件

    之前的工作关系,需要在手机上支持中文和拼音搜索.由于手机上存储数据一般都是用 sqlite,所以是基于 sqlite3 fts5 来实现.这段时间再次入门 c++,所以想用 c++ 实现一下,一来用于 ...

  6. elasticsearch实现基于拼音搜索

    1.背景 一般情况下,有些搜索需求是需要根据拼音和中文来搜索的,那么在elasticsearch中是如何来实现基于拼音来搜索的呢?可以通过elasticsearch-analysis-pinyin分析 ...

  7. Elasticsearch之拼音搜索(十五)

    拼音搜索在中文搜索环境中是经常使用的一种功能,用户只需要输入关键词的拼音全拼或者拼音首字母,搜索引擎就可以搜索出相关结果.在国内,中文输入法基本上都是基于汉语拼音的,这种在符合用户输入习惯的条件下缩短 ...

  8. select2.js实现拼音搜索支持

    拼音搜索的原理: 将下拉框选项中的中文转换成汉语拼音(或拼音首字母),然后与输入的字母进行比较,如果包含则被检索出来. 引用插件: 1. pinyin.js文件用于将汉字转化为拼音的JavaScrip ...

  9. Elasticsearch实战(四)---中英文分词及拼音搜索

    Elasticsearch实战-中英文分词及拼音搜素 文章目录 Elasticsearch实战-中英文分词及拼音搜素 1.ElasticSearch 中英文分词插件 1.1 分词插件 1.2 默认分词 ...

最新文章

  1. 【汇总】ElementUI中高频次使用代码片段
  2. input框选中时如何不出灰框_如何建立学习目标:这个SMART原则,你要了解,家长看懂教给孩子...
  3. 大数据量,海量数据 处理方法总结(转)
  4. HTTP Basic 验证客户端 C#实现笔记
  5. Android下集成Paypal支付
  6. Elasticsearch 索引容量管理实践
  7. linux中安装软件,查看、卸载已安装软件方法
  8. sharepoint 2007功能增强解决方案,资料收集
  9. Android编程权威指南学习:Activity之间传递参数
  10. DBA警世录:备份重于一切
  11. 基础的数据处理(1)—出租车数据的基础处理,由gps生成OD(pandas)
  12. 笔记本实现Win10+Ubuntu双系统(超详细)
  13. 【第五章 | 存储器管理】《操作系统 慕课版》课后答案 + 复习
  14. 【原创】5.4青年有感
  15. 【MySQL】MySQL分库分表详解
  16. 如何去掉字符串前面的中括号
  17. IIC通信协议(硬件实现IIC通信详解I)
  18. 计算机的硬件系统的组成
  19. 2017考研计算机真题错题本
  20. Zend Studio 13.6.1 最新Crack

热门文章

  1. ltib常用命令详解
  2. 计算机网络技术中的单位换算,计算机存储/网络传输中单位换算1000还是1024
  3. 数字IC设计学习笔记(一)——逻辑综合简介
  4. AWS架构师认证有什么用?考试难吗?
  5. python如何提取word文档某个段落所有内容(包括段落、表格、图片一并提取)
  6. 一文道尽 Excel 的 Criterion
  7. 迅雷下载原理和P2p技术
  8. linux tao环境 安装_linux编译TAO的问题,求高手指导!!!!
  9. 金蝶K3案例实验实际成本前台操作
  10. 转载:Think in AngularJS:对比jQuery和AngularJS的不同思维模式(大漠穷秋)