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

一、安装拼音搜索插件

下载对应版本的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之拼音搜索(十五)

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

  2. elasticsearch实现基于拼音搜索

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

  3. 混合索引java代码,Elasticsearch 实现拼音,中文,首字母混合搜索

    在实际搜索需求中,常常需要对中文做拼音搜索,首字母搜索或者中文拼音首字母混合搜索. 比如要对 "广发聚财信用" 这几个中文进行拼音搜索,我们可能的搜索关键字是:"广发&q ...

  4. springboot集成elasticsearch,实现搜索提示补全功能

    springboot集成elasticsearch,通过实体类创建索引,实现搜索提示补全功能 文章目录 springboot集成elasticsearch,通过实体类创建索引,实现搜索提示补全功能 一 ...

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

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

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

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

  7. 【Elasticsearch】如何使用 Elasticsearch 6.2 搜索中文、日语和韩语文本 - 第 3 部分:语言检测工具

    1.概述 翻译:https://www.elastic.co/cn/blog/how-to-search-ch-jp-kr-part-3 这是我有关中文.日语和韩语文本搜索的系列文章的第 3 部分.如 ...

  8. 【Elasticsearch】如何使用 Elasticsearch 6.2 搜索中文、日文和韩文文本 - 第 2 部分: 多字段

    1.概述 翻译:https://www.elastic.co/cn/blog/how-to-search-ch-jp-kr-part-2 如何使用 Elasticsearch 6.2 搜索中文.日文和 ...

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

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

  10. Laravel + Elasticsearch 实现中文搜索

    安装Elasticsearch-php https://github.com/elastic/elasticsearch-php 使用composer安装: 在项目目录下,执行以下命令 compose ...

最新文章

  1. HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap
  2. Dragon Quest VIII 流程攻略(繁体中文完结版)
  3. Netflix 如何使用机器学习来提升流媒体质量
  4. 【struts2】struts2中的Action详解
  5. 数据结构基础:线性表学习笔记
  6. (转)基于MVC4+EasyUI的Web开发框架经验总结(3)- 使用Json实体类构建菜单数据...
  7. 用curl自动登录HTTPS站点
  8. 在对比中理解 Node
  9. 10 things they never teach in college about programming
  10. JAVA输入jdb,解决 JAVA 单步调试键盘输入被 JDB 占用的问题
  11. qt qss设置字体大小_Qt编写输入法V2019终极版
  12. 如何将 Mac 镜像到电视
  13. java动态运行代码并动态执行
  14. linux ubuntu 加密狗,ubuntu – 将usb加密狗连接到KVM VM
  15. 思维导图软件哪个好?不要错过这份思维导图软件合集
  16. python学习笔记(八)传递任意数量的实参
  17. Maya:解决丢失的贴图和引用
  18. 《数学建模算法与应用第二版》——chapter13.数字图像处理
  19. 玩转 MATLAB 附加功能/硬件支持包安装
  20. Mysql的问题 Row size too large

热门文章

  1. 关于Ext.grid.EditorGridPanel使用中遇到的问题
  2. 交互设计之层次设计配色篇(表达逻辑——前进色与后退色)
  3. 360服务器被劫持怎么修复,360浏览器网络劫持导致主页被改怎么办?360浏览器网络劫持导致主页被改的解决办法...
  4. 2021年Delphi第26届应用软件开发展示挑战赛的获胜者名单
  5. 【AI视野·今日CV 计算机视觉论文速览 第155期】Fri, 6 Sep 2019
  6. 数字电路信号逻辑电平标准详解
  7. 2016 计算机控制技术试题,计算机控制技术试题
  8. 前端开发——图片标注工具
  9. EXCEL VBA 入门与实用例子
  10. CSS命名规范(规则)常用的CSS命名规则