当前位置: 首页 > news >正文

Elasticsearch之拼音搜索(十五)

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

        在ES中可以使用拼音分析器插件进行拼音搜索,插件的项目地址为https://github.com/medcl/elasticsearch-analysis-pinyin,该插件对较新的ES版本并不支持,需要用户自行进行编译安装。

拼音分析器插件的安装

首先使用Git命令从互联网中复制该项目,命令如下:

git clone  https://github.com/medcl/elasticsearch-analysis-pinyin  

然后进入该项目,修改目录中的pom.xml文件,将elasticsearch.version选项的值修改成当前ES版本的值,如下图所示:

修改完成后保存文件并退出,使用mvn命令进行编译:

mvn install

 安装完成后会在${PROJECT_PATH}/target/releases/目录下生成目标文件elasticsearch analysis-pinyin-7.13.2.zip。

在{ES_HOME}/plugins/目录下创建一个名称为pinyin-analysis的子目录,然后将上面的文件复制到该目录下,命令如下:

cp target/releases/elasticsearch-analysis-pinyin-7.13.2.zip /home/es/elasticsearch-7.13.2/plugins/ pinyin-analysis/    

进入{ES_HOME}/plugins/pinyin-analysis目录,将elasticsearch-analysis-pinyin-7.10.2.zip文件解压缩。

重启ES,如果输出如下图所示的日志,表示安装成功。

拼音分析器插件的使用

拼音分析器提供的分析器为pinyin,另外还提供了与其同名的分词器和分词过滤器。安装完成后,可以使用pinyin分析器或分词器进行验证。

下面使用pinyin分析器对待测试文本进行分析,DSL如下:

POST _analyze
{
  "analyzer": "pinyin",
  "text":"天安门"
}

 也可以将拼音分析器应用到索引的字段中。以下示例中将自定义的ik_pinyin_analyzer分析器设置为旅馆索引中title字段的默认分析器,DSL如下:

PUT /hotel
{
  "settings": {
    "analysis": {
      "analyzer": { //自定义分词器
        "ik_pinyin_analyzer":{
          "tokenizer":"ik_max_word",//设置分词器
          "filter":["pinyin_filter"] //设置分词过滤器
        }
      },
      "filter": {
        "pinyin_filter":{ //定义分词过滤器
          "type":"pinyin",//封装拼音分词过滤器
          "keep_first_letter":true,//设置保留拼音的首字母
          "keep_full_pinyin":false,//设置保留拼音的全拼
          "keep_none_chinese":true//设置不保留中文
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title":{
        "type":"text",
        "analyzer": "ik_pinyin_analyzer"//设置使用自定义分析器
      }
    }
  }
}

搜索关键词wy,目的是想搜索“文雅”相关的旅馆,DSL如下:

GET /hotel/_search
{
  "query": {
    "match": {
      "title": "wy"
    }
  }
}

使用带有拼音词语过滤器的分析器后,就可以匹配查询词中的拼音首字母了。正如上面的一些示例,使用拼音分析器时,有很多的选项可以设置。例如,是否显示单字拼音的首字母、是否显示组合词的首字母、是否显示查询词的全部拼音等,具体的设置内容可以参考官网说明

相关文章:

  • JavaSrcip类型转换
  • 绿色世界,美丽中国
  • 计算机毕业设计ssm速到校园网上订餐网站5n2pv系统+程序+源码+lw+远程部署
  • Redis经典面试题
  • 【开发经验】通知气泡实现思路
  • 机器学习损失函数
  • Set接口学习(2)
  • Windows下更改并使用NTP
  • Framework面试之(Binder)(Handler)脚踏大厂面试大赏
  • Redis的不同系统安装教程
  • 几种Set的比较
  • 使用 ECK 在 Kubernetes 集群中管理 Elastic Stack
  • 在Qt中使用MySQL
  • java---SPFA算法---最短路(4)(每日一道算法2022.8.30)
  • 2382. 删除操作后的最大子段和--(phase2--day3)
  • Android组件 - 收藏集 - 掘金
  • ECS应用管理最佳实践
  • E-HPC支持多队列管理和自动伸缩
  • ESLint简单操作
  • gitlab-ci配置详解(一)
  • JavaScript设计模式之工厂模式
  • jQuery(一)
  • js对象的深浅拷贝
  • linux学习笔记
  • nodejs调试方法
  • scala基础语法(二)
  • 讲清楚之javascript作用域
  • 聚类分析——Kmeans
  • 力扣(LeetCode)357
  • 前端js -- this指向总结。
  • 优化 Vue 项目编译文件大小
  • - 转 Ext2.0 form使用实例
  • Hibernate主键生成策略及选择
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​Python 3 新特性:类型注解
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • (12)目标检测_SSD基于pytorch搭建代码
  • (145)光线追踪距离场柔和阴影
  • (16)Reactor的测试——响应式Spring的道法术器
  • (论文阅读11/100)Fast R-CNN
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Mysql的优化设置
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .NET 5种线程安全集合
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET关于 跳过SSL中遇到的问题