Elasticsearch拼音分析器使用

拼音搜素在中文搜索环境中是经常使用的一种功能,用户只需输入关键词的拼音全拼或者拼音首字母,搜索引擎就可以搜索出相关结果。ES提供拼音分析器插件来满足拼音搜索的需求。

安装maven

安装拼音分析器插件前,先安装maven:

1、官网下载apache-maven-3.9.0-bin.zip压缩包:https://maven.apache.org/download.cgi

Elasticsearch拼音分析器使用

2、新建系统变量:

变量名:MAVEN_HOME
变量值:C:apache-maven-3.9.0

3、编辑系统变量path:

%MAVEN_HOME%bin

4、然后测试是否配置成功

C:WINDOWSsystem32>mvn -v
Apache Maven 3.9.0 (9b58d2bad23a66be161c4664ef21ce219c2c8584)
Maven home: C:apache-maven-3.9.0
Java version: 19.0.2, vendor: Oracle Corporation, runtime: C:Program FilesJavajdk-19
Default locale: zh_CN, platform encoding: UTF-8
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

可能出现错误信息:The JAVA_HOME environment variable is not defined correctly,this environment。查明原因未安装JDK,JDK安装方式参考:安装JMeter测试工具文章。

安装拼音分析器插件

1、首先使用git命令复制该插件到本地,命令如下:

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

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

<properties>
      <elasticsearch.version>8.5.0</elasticsearch.version>
      <maven.compiler.target>1.8</maven.compiler.target>

修改完成后,使用mvn命令进行编译:

C:elasticsearch-analysis-pinyin>mvn install

安装完成后会在elasticsearch-analysis-pinyin目录下生成target文件夹,进入C:elasticsearch-analysis-pinyintargetreleases文件夹下会看到生成elasticsearch-analysis-pinyin-8.5.0.zip文件,解压该文件。lasticsearch-analysis-pinyin-8.5.0目录有如下文件:

Elasticsearch拼音分析器使用

3、进入ES的安装目录C:elasticsearch-8.5.0plugins,创建一个名称为pinyin-analysis的子目录,然后将elasticsearch-analysis-pinyin-8.5.0文件夹的文件复制到该目录下。

Elasticsearch拼音分析器使用

4、重启es,有如下输出信息,表示安装成功:

[2023-03-14T23:59:23,361][INFO ][o.e.p.PluginsService     ] [LAPTOP-OVFTH3H5] loaded plugin [analysis-pinyin]

拼音分析器插件使用

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

POST _analyze
{
  "analyzer": "pinyin",
  "text": "王府井"

}

分析结果如下:

{
  "tokens": [
  {
    //王的拼音形式
     "token": "wang"
     "start_offset":0,
     "end_offset":0,
     "type": "word",
     "position": 0
  },{
    //王府井的拼音形式
     "token": "wfj"
     "start_offset":0,
     "end_offset":0,
     "type": "word",
     "position": 0
  },{
    //府的拼音形式
     "token": "fu"
     "start_offset":0,
     "end_offset":0,
     "type": "word",
     "position": 1
  },{
    //井的拼音形式
     "token": "fu"
     "start_offset":0,
     "end_offset":0,
     "type": "word",
     "position": 2
  }
  ]
}

在上面的代码中,王府井被切分成拼音wang、fu、jing及首字母wfj。

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

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

为演示方便,下面向酒店索引中写入如下数据:

POST /_bulk 
{"index":{"_index":"hotel","_id":"001"}}
{"title": "文雅假日酒店"}
{"index":{"_index":"hotel","_id":"002"}}
{"title": "北京金都嘉怡酒店"}
{"index":{"_index":"hotel","_id":"003"}}
{"title": "天津金都欣欣酒店"}
{"index":{"_index":"hotel","_id":"004"}}
{"title": "金都酒店"}
{"index":{"_index":"hotel","_id":"005"}}
{"title": "文雅精选酒店"}  

搜索关键词wy,目的是想搜索“文雅”相关的酒店如下所示:

GET /hotel/_search 
{
"query": {                       //搜索匹配wy的文档
   "match": {
     "title": "wy"
  }
}
}  

搜索结果如下:

{ 

 "hits" : {
  …
   "hits" : [
    {
       "_index" : "hotel",
       "_type" : "_doc",
       "_id" : "005",
       "_score" : 0.919734,
       "_source" : {
         "title" : "文雅精选酒店" //字段中的“文雅”和查询词wy匹配
      }
    },
    {
       "_index" : "hotel",
       "_type" : "_doc",
       "_id" : "001",
       "_score" : 0.816522,
       "_source" : {
         "title" : "文雅假日酒店" //字段中的“文雅”和查询词wy匹配
      }
    }
  ]
}
}  

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

原文始发于微信公众号(面试技术):Elasticsearch拼音分析器使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/186871.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!