- elastic默认的分词插件对中文支持不好,比如对
中华人民共和国
进行分词的时候:
1.使用默认分词插件,会分别搜索中、华、人、民、共、和、国
2. 推荐使用大名鼎鼎的ik分词器, 地址:https://github.com/medcl/elasticsearch-analysis-ik/
3. 安装方法如前面的一片文章所述,建议使用ik_smarter就够了,上面的分词会变成: 中华、人民、共和国
4. 使用ik之后,还是有一个问题,对于中文用户,很多人在搜索的时候不一定会切换到中文的输入法,也就是输入的是拼音, 但是ik并不支持拼音搜索,这样搜出来的结果是英文或者是不准确的,所以需要使用拼音分词插件:https://github.com/medcl/elasticsearch-analysis-pinyin
5. 安装方法依旧如前面所述
- 安装插件之后,需要重新更新一下mapping,以实现拼音+多音字的搜索结果:
topic = \
{
"settings": {
"analysis": {
"analyzer": {
"ik_pinyin_analyzer": {
"type":"custom",
"tokenizer": "ik_smart",
"filter": ["my_pinyin","word_delimiter"]
}
},
"filter": {
"my_pinyin": {
"type": "pinyin",
"keep_first_letter": False,
"keep_full_pinyin": True,
"keep_none_chinese": True,
"keep_none_chinese_in_first_letter": True,
"keep_original": False,
"limit_first_letter_length": 16,
"lowercase": True,
"trim_whitespace": True,
}
}
}
},
"mappings" : {
"topic" : {
"properties" : {
"creator" : {
"type" : "string",
"index": "not_analyzed"
},
"postCount" : {
"type" : "integer",
"index": "not_analyzed"
},
"followNum" : {
"type" : "integer",
"index": "not_analyzed"
},
"creatTime" : {
"type" : "date",
"index": "not_analyzed"
},
"tagName": {
"type": "text",
"index": "analyzed",
"store": "no",
"analyzer": "ik_pinyin_analyzer",
"term_vector": "with_positions_offsets",
"boost": 10,
"fields" : {
"untouch": {
"type": "keyword"
}
}
}
}
}
}
}
-
搜索实现的结果如下图所示:
Paste_Image.png
网友评论