1. 使用場景介紹
搜索功能支持:拼音檢索诲宇,中文檢索俭令,拼音中文混合檢索
例如:輸入:l德h
【期望結果】:劉德華 和劉德華4
【不期望結果】:劉得華 、劉的華
1. 下載pinyin 插件
github地址
注意:下載的版本要與自己的ES版本一致
2. 修改插件源碼以及安裝
注意:
1)目前v7.13.1 已經(jīng)支持拼音中文混合檢索 可以直接安裝插件直接使用
2)我本地目前是v7.12.0 换吧,所以需要對源碼進行修改泌霍;如果你的ES版本也是低于v7.13.1版本;也需要進行修改教沾;
我修改方法:
1)下載 v7.12.0 源碼和v7.13.1 源碼
2)通過compare進行比較蒲跨,直接把v7.13.1 多余的代碼復制到 v7.12.0 中
3)修改pom 版本
4)maven 打包 mvn clean package
5)將\elasticsearch-analysis-pinyin-7.12.0\target\releases\elasticsearch-analysis-pinyin-7.12.0.zip 包拷貝到 ES 安裝目錄的\elasticsearch-7.12.0-windows-x86_64\elasticsearch-7.12.0\plugins 文件夾下,解壓后授翻,刪除elasticsearch-analysis-pinyin-7.12.0.zip 見截圖:
6)重啟ES
-
驗證插件是否安裝成功: GET /_cat/plugins?pretty 成功截圖:
3. 創(chuàng)建index并使用kibana進行測試
1)創(chuàng)建索引
############################創(chuàng)建索引#########################
PUT /my_index
{
"settings": {
"analysis": {
"analyzer": {
"pinyin_chinese_analyzer": {
"tokenizer": "pinyin_tokenizer"
},
"pinyin_analyzer": {
"tokenizer": "pinyin_chinese_tokenizer"
}
},
"tokenizer": {
"pinyin_chinese_tokenizer": {
"type": "pinyin",
"keep_first_letter": false,
"keep_separate_first_letter": false,
"keep_full_pinyin":false,
"keep_original":false,
"limit_first_letter_length":50,
"keep_separate_chinese": true,
"lowercase":true
},
"pinyin_tokenizer": {
"type": "pinyin",
"keep_first_letter": false,
"keep_separate_first_letter": true,
"keep_full_pinyin":true,
"keep_original":false,
"limit_first_letter_length":50,
"keep_separate_chinese": true,
"lowercase":true
}
}
}
}
}
- 查詢索引
#####################查詢索引#########################
GET /_cat/indices
- Mapping設置
POST /my_index/_mapping
{
"properties": {
"name": {
"type": "text",
"analyzer": "pinyin_chinese_analyzer",
"search_analyzer": "pinyin_analyzer"
}
}
}
- 查詢Mapping設置是否生效
#-------------------查詢Mapping-----------------------
GET /my_index/_mapping?pretty
- 測試索引下定義的分詞器
#--------------------測試分詞器----------------------
GET /my_index/_analyze
{
"text": ["劉德華"],
"analyzer": "pinyin_chinese_analyzer"
}
GET /my_index/_analyze
{
"text": ["劉德h"],
"analyzer": "pinyin_analyzer"
}
- 創(chuàng)建數(shù)據(jù)
###################創(chuàng)建數(shù)據(jù)########################
POST /my_index/_doc/1
{"name":"劉德華"}
PUT /my_index/_doc/2
{"name":"劉的華"}
PUT /my_index/_doc/3
{"name":"劉得華"}
PUT /my_index/_doc/4
{"name":"劉德華4"}
PUT /my_index/_doc/5
{"name":"劉5德5華5"}
- 查詢所有數(shù)據(jù)
####################查詢數(shù)據(jù)############################
GET /my_index/_search
{
"query": {
"match_all": {}
}
}
- 拼音中文混合檢索
####################檢索數(shù)據(jù)########################
GET /my_index/_search
{
"query": {
"match_phrase": {
"name": "l德h"
}
}
}
[參考文檔]
es 修改拼音分詞器源碼實現(xiàn)漢字/拼音/簡拼混合搜索時同音字不匹配 - Liu_d_w - 博客園 (cnblogs.com)
https://github.com/medcl/elasticsearch-analysis-pinyi