拼音搜索的关键是汉字与拼音的转换,只要找到这样的elasticsearch插件就可以了。在GitHub上恰好有这样的拼音插件
相关学习链接

安装拼音插件

在GitHub页面中找到releases:
首先下载ES版本对应的拼音插件
安装位置放到这个位置:

然后重启你的elasticsearch即可。

测试
在kibana中,输入命令测试:

POST _analyze
{"text": ["张学友", "刘德华"],"analyzer": "pinyin"
}

结果:

{"tokens" : [{"token" : "zhang","start_offset" : 0,"end_offset" : 0,"type" : "word","position" : 0},{"token" : "zxy","start_offset" : 0,"end_offset" : 0,"type" : "word","position" : 0},{"token" : "xue","start_offset" : 0,"end_offset" : 0,"type" : "word","position" : 1},{"token" : "you","start_offset" : 0,"end_offset" : 0,"type" : "word","position" : 2},{"token" : "liu","start_offset" : 1,"end_offset" : 1,"type" : "word","position" : 3},{"token" : "ldh","start_offset" : 1,"end_offset" : 1,"type" : "word","position" : 3},{"token" : "de","start_offset" : 1,"end_offset" : 1,"type" : "word","position" : 4},{"token" : "hua","start_offset" : 1,"end_offset" : 1,"type" : "word","position" : 5}]
}

组合分词器
在分词处理时,会用到analyzer,我们以前称它为分词器。但其实它叫分析器,一般包含两部分:

-Tokenizer:分词器,对文本内容分词,得到词条Term

  • filter:过滤器,对分好的词条做进一步处理,例如拼音转换同义词转换

我们可以把各种下载的分词插件组合,作为tokenizer或者filter,来完成自定义分词效果。

示例:

PUT /goods
{"settings": {"analysis": {"analyzer": {"my_pinyin": {"tokenizer": "ik_smart","filter": ["py"]}},"filter": {"py": {"type": "pinyin","keep_full_pinyin": false,"keep_joined_full_pinyin": true,"keep_original": true,"limit_first_letter_length": 16,"none_chinese_pinyin_tokenize": false}}}},"mappings": {"properties": {"id": {"type": "keyword"},"name": {"type": "completion","analyzer": "my_pinyin","search_analyzer": "ik_smart"},"title":{"type": "text","analyzer": "my_pinyin","search_analyzer": "ik_smart"},"price":{"type": "long"}}}
}

说明:【注意一下拼音分词器的设置内容】


测试自定义分词器
我们在kibana中运行测试,看看分词效果:

POST /goods/_analyze
{"text": "你好,华为","analyzer": "my_pinyin"
}

结果:

{"tokens" : [{"token" : "你好","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "nihao","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "nh","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "华为","start_offset" : 3,"end_offset" : 5,"type" : "CN_WORD","position" : 1},{"token" : "huawei","start_offset" : 3,"end_offset" : 5,"type" : "CN_WORD","position" : 1},{"token" : "hw","start_offset" : 3,"end_offset" : 5,"type" : "CN_WORD","position" : 1}]
}

测试拼音补全
一旦有了拼音分词器,尽管用户使用拼音,我们也能完成自动补全了。

先插入一部分数据:

PUT /goods/_bulk
{ "index" : {"_id":1 } }
{ "id": 1, "name": ["小米","手机"],"title":"小米10手机"}
{ "index" : {"_id":2 } }
{"id": 2,"name": ["小米", "空调"] ,"title":"小米空调"}
{ "index" : {"_id":3 } }
{"id": 3,"name": ["sony", "mp3"],"title":"sony播放器"}
{ "index" : {"_id":4 } }
{"id": 4,"name": ["松下", "电视"],"title":"松下电视"}

然后来一个自动补全的查询:使用prefix前缀来进行自动补全查询

POST /goods/_search
{"suggest": {"name_suggest": {"prefix": "s","completion": {"field": "name"}}}
}

注意,我们输入的关键字是字母:s

看结果:

{"took" : 2,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 0,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"suggest" : {"name_suggest" : [{"text" : "s","offset" : 0,"length" : 1,"options" : [{"text" : "sony","_index" : "goods","_type" : "_doc","_id" : "3","_score" : 1.0,"_source" : {"id" : 3,"name" : "sony","title" : "sony播放器"}},{"text" : "手机","_index" : "goods","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"id" : 1,"name" : "手机","title" : "小米手机"}},{"text" : "松下","_index" : "goods","_type" : "_doc","_id" : "4","_score" : 1.0,"_source" : {"id" : 4,"name" : "松下","title" : "松下电视"}}]}]}
}

返回的提示包括:sony、松下、手机,都是以s开头,是不是很酷炫呢!

ES中------拼音搜索相关推荐

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

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

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

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

  3. Elasticsearch(038):es中搜索之入门与分页搜索

    ES中搜索的方式分为两种,一种是通过URL参数进行搜索:另一种是通过POST中body请求参数进行搜索. 针对第一种我们进行简单的讲解,我们关注的核心放在第二种上面. 一.简单搜索(search) 1 ...

  4. elasticsearch实现基于拼音搜索

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

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

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

  6. es使用pinyin搜索,对应中文没有高亮显示

    刚开始的时候,索引 article 的 mapping {"mapping":{"article":{"mappings":{"p ...

  7. Elastic Search 中文拼音搜索补全实战

    引言 搜索提示是搜索框一个比较基础的功能,他赋予了搜索框生命,提高了用户的搜索体验.本文通过仿写 boss 直聘首页职位公司搜索,来实现一个自己搜索提示功能. 需求分析 搜索提示的情况比较多,比如根据 ...

  8. es中修改某个字段值_搜索引擎之laravel中使用elasticsearch(一)

    一.概述 Elasticsearch官方提供了Composer包可直接引用就好,不过要注意:如果你使用的elastcsearch不是最新的那么我建议你指定合适的版本下载,而不要采用最新的,因为不同版本 ...

  9. Elasticsearch和Hive整合,将hive数据同步到ES中

    1 Elasticsearch整合Hive 1.1 软件环境 Hadoop软件环境 Hive软件环境 ES软件环境 1.2 ES-Hadoop介绍 1.2.1 官网 https://www.elast ...

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

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

最新文章

  1. 启动指定参数_SpringBoot的三种启动方式
  2. string转short java_[Java基础]之 数据类型转换
  3. 机器学习笔记(三)——正则化最小二乘法
  4. ktv数据表设计 1216
  5. Spring项目使用Junit4测试配置
  6. 跨境电商ERP系统有几大功能?
  7. wcf 基础教程 第一讲 wcf基础知识
  8. 物联网架构成长之路(23)-Docker练习之Elasticsearch服务搭建
  9. 前端打印功能实现及css设置
  10. 2019-CS224n-Assignment2
  11. 关于黑莓手机 三键重启的操作方法
  12. 90-0004Web颜色标准【中英文颜色对照】
  13. 洛谷 P1338 末日的传说 解题报告
  14. 简历中的工作经历怎么写?
  15. matlab批量修改图片的大小_matlab批量修改图片大小
  16. sea新浪云计算机平台,新浪云计算SAE免费申请使用及域名绑定
  17. 用HTML+CSS做一个漂亮简单的节日网页【元宵节】
  18. 红米Note 5启用ROOT超级权限的经验
  19. java学习第二周周记
  20. 2022-2027年中国复合超硬材料行业发展前景及投资战略咨询报告

热门文章

  1. (php毕业设计)基于thinkphp5小区物业管理系统
  2. 善用佳软站长:畅谈大数据时代的知识管理
  3. linux vi中删除命令,linux vi删除命令的使用
  4. C#等 句柄是什么?
  5. com.android.phone lg g3,详细的lg g3 root教程与方法
  6. 手机怎么用外嵌字幕_iphone 12发布 ! “预购、定金、尾款、换手机”用英语怎么说?...
  7. 数字图像处理-冈萨雷斯(学习笔记)
  8. win7眼睛保护色设置方法
  9. Android--使用融云SDK开发即时聊天(一)----基本环境搭建
  10. cad打开a3样板图形_CAD如何绘制标准的A3图框(A3图纸样板图)