Elasticsearch實戰(zhàn)-中英文分詞及拼音搜素
1.ElasticSearch 中英文分詞插件
基于文章 Elasticsearch實戰(zhàn)(一)—安裝及基本語法使用 前面的文章,我們已經(jīng)基本使用了ES,而且也講了 match 和 match_phrase的區(qū)別,今天講一下如何分詞
1.1 分詞插件
# 我是用了 IK分詞
IK分詞器 :elasticsearch-analysis-ik-7.10.0
拼音分詞: elasticsearch-analysis-pinyin-7.10.0
在官網(wǎng)上都可以下載 IK分詞地址
如果GitHub下載太慢的,可以用這個鏈接下載
鏈接:https://pan.baidu.com/s/1spLBdCDCPtZ1sa_EXNkU5g?pwd=mhtn
提取碼:mhtn
解壓到 es/plugins 插件文件夾下,
重啟ES
1.2 默認分詞
# 執(zhí)行
POST /jzjik/_analyze
{
"text":"湖北省武漢市光谷大道"
}
查看現(xiàn)在默認 插入數(shù)據(jù) 的分詞設(shè)置 可以看到 現(xiàn)在是 一個字,一個字 拆開去分詞的
這就是 為什么我們?nèi)ゲ樵?單個字也能夠查詢成功的原因
1.3 IK分詞-ik_smart
IK分詞器 有兩種分詞模式
- ik_smart 粗粒度分詞
- ik_max_word 細粒度分詞
# 指定 ik_smart 粗粒度分詞
POST /jzjik/_analyze
{
"text":"湖北省武漢市光谷大道",
"tokenizer": "ik_smart"
}
看下分詞結(jié)果, 分解成了 湖北省, 武漢市 , 光谷, 大道
可以按照常用習慣,進行粗粒度分詞
1.4 IK分詞-ik_max_word
IK分詞器 有兩種分詞模式
- ik_smart 粗粒度分詞
- ik_max_word 細粒度分詞
# 細粒度分詞 就是最大力度的分詞,但是不是 單個字單個字的分詞
POST /jzjik/_analyze
{
"text":"湖北省武漢市光谷大道",
"tokenizer": "ik_max_word"
}
可以看到分詞結(jié)果 分別拆分成了 湖北省, 湖北, 省, 武漢市, 武漢, 市,光谷, 大道
1.5 拼音分詞
我們經(jīng)常見到 張三 名字輸入 zhang 就可以出來 張三 這種情況,其實就是對姓名進行 拼音分詞
先創(chuàng)建一個自定義的 拼音分詞器
# 可以看到自定義了兩個 拼音分詞 ik_smart_pinyin 及 ik_max_word_pinyin
#底層用的 tokenizer 就是 粗粒度及細粒度分詞
PUT /iktest/
{
"settings": {
"analysis": {
"analyzer": {
"ik_smart_pinyin": {
"type": "custom",
"tokenizer": "ik_smart",
"filter": ["my_pinyin", "word_delimiter"]
},
"ik_max_word_pinyin": {
"type": "custom",
"tokenizer": "ik_max_word",
"filter": ["my_pinyin", "word_delimiter"]
}
},
"filter": {
"my_pinyin": {
"type" : "pinyin",
"keep_separate_first_letter" : true,
"keep_full_pinyin" : true,
"keep_original" : true,
"limit_first_letter_length" : 16,
"lowercase" : true,
"remove_duplicated_term" : true
}
}
}
}
}
后面設(shè)置的 這些 到底有什么意思?
屬性名字 | 說明 |
---|---|
keep_first_letter | true: 將所有漢字的拼音首字母拼接到一起:劉德華 -> ldh |
keep_full_pinyin | true:在最終的分詞結(jié)果中,會出現(xiàn)每個漢字的全拼:劉德華 -> liu , de, hua |
keep_none_chinese | true: 是否保留非中文本,例如 java程序員, 在最終的分詞結(jié)果單獨出現(xiàn) java |
keep_separate_first_lett | true: 在最終的分詞結(jié)果單獨將每個漢字的首字母作為一個結(jié)果:劉德華 -> l, d, h |
keep_joined_full_pinyin | true:在最終的分詞結(jié)果中將所有漢字的拼音放到一起:劉德華 -> liudehua |
keep_none_chinese_in_joined_full_pinyin | true:將非中文內(nèi)容文字和中文漢字拼音拼到一起 |
none_chinese_pinyin_tokenize | true: 會將非中文按照可能的拼音進行拆分 |
keep_original | true: 保留原始的輸入 |
remove_duplicated_term | true: 移除重復 |
然后 插入文本 測試下 ,拼音分詞是否生效
GET /iktest/_analyze
{
"text":"湖北省武漢市光谷大道",
//指定 字段使用 拼音分詞
"analyzer": "ik_smart_pinyin"
}
查詢結(jié)果,可以看到已經(jīng)生效 ,拼音分別是 h,hu,b,bei,hbs 等 拼音及縮寫生成分詞效果
1.6 拼音分詞 查詢
設(shè)置 索引Mapping 把剛才定制的 拼音分詞 用于數(shù)據(jù)字段上
# 給 iktest 索引 設(shè)置mapping, name 字段 設(shè)置 ik_smart_pinyin 拼音分詞
PUT /iktest/_mapping
{
"properties": {
"name": {
"type": "keyword",
"fields": {
"pinyin": {
"type": "text",
"analyzer": "ik_smart_pinyin",
"boost": 10
}
}
}
}
}
# 插入一條數(shù)據(jù) 到iktest id=1
put /iktest/_doc/1
{
"name":"馬云"
}
# 插入一條數(shù)據(jù) 到iktest id=2
put /iktest/_doc/2
{
"name":"劉德華"
}
然后用拼音 查詢 試一試
m 查詢 馬云
ld 或者 ldh, 查詢 劉德華文章來源:http://www.zghlxwxcb.cn/news/detail-627931.html
至此 我們分詞,包括拼音分詞 已經(jīng)處理完畢, 下一篇 我們介紹 Springboot 結(jié)合 es 進行數(shù)據(jù)處理文章來源地址http://www.zghlxwxcb.cn/news/detail-627931.html
到了這里,關(guān)于Elasticsearch實戰(zhàn)(四)---中英文分詞及拼音搜索的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!