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"
    }
  }
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Elasticsearch 中进行中文拼音搜索,需要使用中文分词器和拼音分词器。中文分词器可以将中文文本分成词语,拼音分词器可以将词语转化为拼音。 以下是一个简单的例子: 1. 安装中文分词器和拼音分词器插件 ```bash sudo bin/elasticsearch-plugin install analysis-smartcn sudo bin/elasticsearch-plugin install analysis-pinyin ``` 2. 创建索引和映射 ```json PUT /my_index { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "my_tokenizer", "filter": [ "lowercase", "my_pinyin" ] } }, "tokenizer": { "my_tokenizer": { "type": "smartcn_tokenizer" } }, "filter": { "my_pinyin": { "type": "pinyin", "keep_first_letter": true, "keep_separate_first_letter": false, "keep_full_pinyin": true, "keep_original": true, "limit_first_letter_length": 16, "lowercase": true } } } }, "mappings": { "properties": { "title": { "type": "text", "analyzer": "my_analyzer" } } } } ``` 3. 插入文档 ```json POST /my_index/_doc { "title": "中华人民共和国" } ``` 4. 搜索 ```json POST /my_index/_search { "query": { "match": { "title": { "query": "zhonghua", "analyzer": "my_analyzer" } } } } ``` 在搜索中,我们使用了自定义的分词器 `my_analyzer`,它使用了 `smartcn_tokenizer` 和 `pinyin` 过滤器。在 `pinyin` 过滤器中,我们设置了一些参数,例如 `keep_first_letter` 表示保留首字母,`keep_full_pinyin` 表示保留全拼,`lowercase` 表示转化为小写等。 以上就是在 Elasticsearch 中进行中文拼音搜索的简单示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆天至尊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值