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

一、安装拼音搜索插件

下载对应版本的elasticsearch-analysis-pinyin插件;

https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.9.2/elasticsearch-analysis-pinyin-7.9.2.zip

在elasticsearch安装目录下的的plugin目录新建analysis-pinyin目录,并解压下载的安装包;

重启elasticsearch,可以看到已经正常加载拼音插件

[2022-01-13T20:37:25,368][INFO ][o.e.p.PluginsService     ] [mango] loaded plugin [analysis-pinyin]

二、使用拼音插件

试一下分词效果,可以看到除了每个词的全频,还有每个字的首字母缩写;

POST _analyze
{
"analyzer": "pinyin",
"text": "我爱你,中国"
} {
"tokens" : [
{
"token" : "wo",
"start_offset" : 0,
"end_offset" : 0,
"type" : "word",
"position" : 0
},
{
"token" : "wanzg",
"start_offset" : 0,
"end_offset" : 0,
"type" : "word",
"position" : 0
},
{
"token" : "ai",
"start_offset" : 0,
"end_offset" : 0,
"type" : "word",
"position" : 1
},
{
"token" : "ni",
"start_offset" : 0,
"end_offset" : 0,
"type" : "word",
"position" : 2
},
{
"token" : "zhong",
"start_offset" : 0,
"end_offset" : 0,
"type" : "word",
"position" : 3
},
{
"token" : "guo",
"start_offset" : 0,
"end_offset" : 0,
"type" : "word",
"position" : 4
}
]
}

自定义pinyin filter,并创建mapping;

PUT /milk
{
"settings": {
"analysis": {
"filter": {
"pinyin_filter":{
"type":"pinyin",
"keep_separate_first_letter" : false,
"keep_full_pinyin" : true,
"keep_original" : true,
"limit_first_letter_length" : 16,
"lowercase" : true,
"remove_duplicated_term" : true
}
},
"analyzer": {
"ik_pinyin_analyzer":{
"tokenizer":"ik_max_word",
"filter":["pinyin_filter"]
}
}
}
},
"mappings": {
"properties": {
"brand":{
"type": "text",
"analyzer": "ik_pinyin_analyzer"
},
"series":{
"type": "text",
"analyzer": "ik_pinyin_analyzer"
},
"price":{
"type": "float"
}
}
}
}

批量索引文档;

POST _bulk
{"index":{"_index":"milk", "_id":1}}}
{"brand":"蒙牛", "series":"特仑苏", "price":60}
{"index":{"_index":"milk", "_id":2}}}
{"brand":"蒙牛", "series":"真果粒", "price":40}
{"index":{"_index":"milk", "_id":3}}}
{"brand":"华山牧", "series":"华山牧", "price":49.90}
{"index":{"_index":"milk", "_id":4}}}
{"brand":"伊利", "series":"安慕希", "price":49.90}
{"index":{"_index":"milk", "_id":5}}}
{"brand":"伊利", "series":"金典", "price":49.90}

搜索tls,可以看到已经匹配到对应的记录;

POST milk/_search
{ "query": {
"match_phrase_prefix": {
"series": "tl"
}
}
} {
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 6.691126,
"hits" : [
{
"_index" : "milk",
"_type" : "_doc",
"_id" : "1",
"_score" : 6.691126,
"_source" : {
"brand" : "蒙牛",
"series" : "特仑苏",
"price" : 60
}
}
]
}
}

可以看到查询直接使用MultiPhraseQuery来实现对两个位置字符的定位;

POST milk/_search
{ "query": {
"match_phrase_prefix": {
"series": "tl"
}
},
"highlight": {
"fields": {
"series": {}
}
}
} {
"profile" : {
"shards" : [
{
"id" : "[OoNXoregTmKQAFotUgOeaA][milk][0]",
"searches" : [
{
"query" : [
{
"type" : "MultiPhraseQuery",
"description" : "series:\"(t tl) (li l lun)\"",
"time_in_nanos" : 177400,
"breakdown" : {
"set_min_competitive_score_count" : 0,
"match_count" : 1,
"shallow_advance_count" : 0,
"set_min_competitive_score" : 0,
"next_doc" : 5400,
"match" : 12800,
"next_doc_count" : 1,
"score_count" : 1,
"compute_max_score_count" : 0,
"compute_max_score" : 0,
"advance" : 9200,
"advance_count" : 1,
"score" : 3900,
"build_scorer_count" : 2,
"create_weight" : 40800,
"shallow_advance" : 0,
"create_weight_count" : 1,
"build_scorer" : 105300
}
}
],
"rewrite_time" : 45700,
"collector" : [
{
"name" : "SimpleTopScoreDocCollector",
"reason" : "search_top_hits",
"time_in_nanos" : 14500
}
]
}
],
"aggregations" : [ ]
}
]
}
}

查询也可以返回高亮信息

POST milk/_search
{ "query": {
"match_phrase_prefix": {
"series": "tl"
}
},
"highlight": {
"fields": {
"series": {}
}
}
} {
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 6.691126,
"hits" : [
{
"_index" : "milk",
"_type" : "_doc",
"_id" : "1",
"_score" : 6.691126,
"_source" : {
"brand" : "蒙牛",
"series" : "特仑苏",
"price" : 60
},
"highlight" : {
"series" : [
"<em>特</em><em>仑</em>苏"
]
}
}
]
}
}

elasticsearch之拼音搜索的更多相关文章

  1. elasticsearch实战 中文+拼音搜索

    需求 雪花啤酒  需要搜索雪花.啤酒 .雪花啤酒.xh.pj.xh啤酒.雪花pj ik导入 参考https://www.cnblogs.com/LQBlog/p/10443862.html,不需要修改 ...

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

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

  3. ElasticSearch安装拼音插件 elasticsearch-analysis-pinyin

    elasticsearch-analysis-pinyin 是 ElasticSearch的拼音插件.强大的功能支持拼音等的搜索 1.下载源代码 源码地址https://github.com/medc ...

  4. 【Solr】 solr对拼音搜索和拼音首字母搜索的支持

    问:对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢? 实现方式有2种,但是他们其实是对应的.  用lucene实现 1.建索引, 多建一个索引字段 ...

  5. elasticsearch的rest搜索--- 查询

    目录: 一.针对这次装B 的解释 二.下载,安装插件elasticsearch-1.7.0   三.索引的mapping 四. 查询 五.对于相关度的大牛的文档 四. 查询 1. 查询的官网的文档   ...

  6. 用MFC(C++)实现拼音搜索

    2015年4月1日更新: 我在github开源了Objective-C版的拼音搜索项目,感兴趣的可以去看看: OC版拼音搜索 最近项目需要实现按照拼音搜索资源.在网上找了一下,这方面的东西太少了. J ...

  7. elasticsearch实现网站搜索

    使用elasticsearch 实现网站搜索,可以支持商品搜索,筛选项过滤搜索 ,价格排序, 打分 筛选项聚合,还有其他综合排序 后续推出搜索人工干预排序,根据销量,好评率,售卖率 进行全方位的搜索实 ...

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

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

  9. Python 和 Elasticsearch 构建简易搜索

    Python 和 Elasticsearch 构建简易搜索 作者:白宁超 2019年5月24日17:22:41 导读:件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正 ...

随机推荐

  1. 统计函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业! 谢谢 下载地址:https://officecommunity- ...

  2. LuoguP7713 「EZEC-10」打分 题解

    Content 某个人去参加比赛,\(n\) 个评委分别给他打分 \(a_1,a_2,\dots,a_n\).这个人可以最多执行 \(m\) 次操作,每次操作将一个评委的分数加 \(1\).定义他的最 ...

  3. 辅助函数和高阶函数 map、filter、reduce

    辅助函数和高阶函数 map.filter.reduce: 一.辅助函数:(1-1)响应式函数 (数组更新检测):    push()    pop()    shift()    unshift()  ...

  4. codeforce364(div1.C). Beautiful Set

    C. Beautiful Set time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  5. 【嵌入式】arduino IDE串口监视器可以正常使用但其他软件发送串口指令没有反应的问题

    解决办法: 1.检查 波特率baudrate 是否一致 2.检查 数据位长度databits 是否一致 3.检查 停止位长度stopbits 是否一致 4.检查 奇偶校验位 是否一致 5.(特殊)是否 ...

  6. 【C\C++笔记】register寄存器关键字

    使用寄存器变量提高运行速度 1未使用寄存器组 #include<stdio.h> int main(){ unsigned long a=0; for(int i=0;i<10000 ...

  7. Local Relation Networks for Image Recognition

    目录 概 主要内容 Hu H., Zhang Z., Xie Z., Lin S. Local relation networks for image recognition. In Internat ...

  8. [opencv]KAZE、AKAZE特征检测、匹配与对象查找

    AkAZE是KAZE的加速版 与SIFT,SUFR比较: 1.更加稳定 2.非线性尺度空间 3.AKAZE速度更加快 4.比较新的算法,只有Opencv新的版本才可以用 AKAZE局部匹配介绍 1.A ...

  9. 替代瑞昱RTD2166|pin对pin替代RTD2166|CS5202芯片

    替代瑞昱RTD2166,pin对pin替代RTD2166,外围器件少,设计版框尺寸小,整套方案成本BOM更低. 一. CS5202功能概述  CS5202是一款DP端口到VGA转换器,它结合了DP输入 ...

  10. 制作登录页面,点击键盘的 Enter 键或者单击“登录”按钮,验证用户输入的邮箱和密码是否正确

    查看本章节 查看作业目录 需求说明: 制作登录页面 点击键盘的 Enter 键或者单击"登录"按钮,验证用户输入的邮箱和密码是否正确 实现思路: 准备登录的静态页面 在页面中嵌入脚 ...