ES pinyin 插件 拼音搜索 原理 match_phase
背景
中文搜索很多时候都要用到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; 将刘德华
-> l
、 d
、 h
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相关推荐
- Lucene5学习之拼音搜索
今天来说说拼音检索,这个功能其实还是用来提升用户体验的,别的不说,最起码避免了用户切换输入法,如果能支持中文汉语拼音简拼,那用户搜索时输入的字符更简便了,用户输入次数少了就是为了给用户使用时带来便利. ...
- 从零搭建 ES 搜索服务(四)拼音搜索
一.前言 上篇介绍了 ES 的同义词搜索,使我们的搜索更强大了,然而这还远远不够,在实际使用中还可能希望搜索「fanqie」能将包含「番茄」的结果也罗列出来,这就涉及到拼音搜索了,本篇将介绍如何具体实 ...
- select2.js插件新增支持拼音搜索
话不多说直奔主题 1.拼音搜索的原理: 将下拉框选项中的中文转换成汉语拼音,然后与输入的字母进行比较,如果包含则被检索出来. 2.效果: 3.在select2.js中找到matcher 方法,对此方法 ...
- php 获取 拼音,php根据汉字获取拼音(php基于拼音搜索实现原理)
php根据汉字获取拼音(php基于拼音搜索实现原理) 代码一:获取字符串汉字首字母,兼容GBK和UTF-8<?php function getfirstchar($s0){ //获取单个汉字拼音 ...
- Simple: 一个支持中文和拼音搜索的 sqlite fts5插件
之前的工作关系,需要在手机上支持中文和拼音搜索.由于手机上存储数据一般都是用 sqlite,所以是基于 sqlite3 fts5 来实现.这段时间再次入门 c++,所以想用 c++ 实现一下,一来用于 ...
- elasticsearch实现基于拼音搜索
1.背景 一般情况下,有些搜索需求是需要根据拼音和中文来搜索的,那么在elasticsearch中是如何来实现基于拼音来搜索的呢?可以通过elasticsearch-analysis-pinyin分析 ...
- Elasticsearch之拼音搜索(十五)
拼音搜索在中文搜索环境中是经常使用的一种功能,用户只需要输入关键词的拼音全拼或者拼音首字母,搜索引擎就可以搜索出相关结果.在国内,中文输入法基本上都是基于汉语拼音的,这种在符合用户输入习惯的条件下缩短 ...
- select2.js实现拼音搜索支持
拼音搜索的原理: 将下拉框选项中的中文转换成汉语拼音(或拼音首字母),然后与输入的字母进行比较,如果包含则被检索出来. 引用插件: 1. pinyin.js文件用于将汉字转化为拼音的JavaScrip ...
- Elasticsearch实战(四)---中英文分词及拼音搜索
Elasticsearch实战-中英文分词及拼音搜素 文章目录 Elasticsearch实战-中英文分词及拼音搜素 1.ElasticSearch 中英文分词插件 1.1 分词插件 1.2 默认分词 ...
最新文章
- 【汇总】ElementUI中高频次使用代码片段
- input框选中时如何不出灰框_如何建立学习目标:这个SMART原则,你要了解,家长看懂教给孩子...
- 大数据量,海量数据 处理方法总结(转)
- HTTP Basic 验证客户端 C#实现笔记
- Android下集成Paypal支付
- Elasticsearch 索引容量管理实践
- linux中安装软件,查看、卸载已安装软件方法
- sharepoint 2007功能增强解决方案,资料收集
- Android编程权威指南学习:Activity之间传递参数
- DBA警世录:备份重于一切
- 基础的数据处理(1)—出租车数据的基础处理,由gps生成OD(pandas)
- 笔记本实现Win10+Ubuntu双系统(超详细)
- 【第五章 | 存储器管理】《操作系统 慕课版》课后答案 + 复习
- 【原创】5.4青年有感
- 【MySQL】MySQL分库分表详解
- 如何去掉字符串前面的中括号
- IIC通信协议(硬件实现IIC通信详解I)
- 计算机的硬件系统的组成
- 2017考研计算机真题错题本
- Zend Studio 13.6.1 最新Crack
热门文章
- ltib常用命令详解
- 计算机网络技术中的单位换算,计算机存储/网络传输中单位换算1000还是1024
- 数字IC设计学习笔记(一)——逻辑综合简介
- AWS架构师认证有什么用?考试难吗?
- python如何提取word文档某个段落所有内容(包括段落、表格、图片一并提取)
- 一文道尽 Excel 的 Criterion
- 迅雷下载原理和P2p技术
- linux tao环境 安装_linux编译TAO的问题,求高手指导!!!!
- 金蝶K3案例实验实际成本前台操作
- 转载:Think in AngularJS:对比jQuery和AngularJS的不同思维模式(大漠穷秋)