拼音分词环境准备
找到和ElasticSearch版本相同的ik分词器和拼音分词器ElasticSearch的plugins目录下。
ElasticSearch 插件链接 http://dl.elasticsearch.cn/elasticsearch-plugins/
重启ElasticSearch。
拼音分词属性简介
| 属性 | 说明 |
|---|---|
| keep_first_letter | 启用此选项时,例如:刘德华> ldh,默认值:true |
| keep_separate_first_letter | 启用该选项时,将保留第一个字母分开,例如:刘德华> l,d,h,默认:false,注意:查询结果也许是太模糊,由于长期过频 |
| limit_first_letter_length | 设置first_letter结果的最大长度,默认值:16 |
| keep_full_pinyin | 当启用该选项,例如:刘德华> [ liu,de,hua],默认值:true |
| keep_joined_full_pinyin | 当启用此选项时,例如:刘德华> [ liudehua],默认值:false |
| keep_none_chinese | 在结果中保留非中文字母或数字,默认值:true |
| keep_none_chinese_together | 保持非中国信一起,默认值:true,如:DJ音乐家- > DJ,yin,yue,jia,当设置为false,例如:DJ音乐家- > D,J,yin,yue,jia,注意:keep_none_chinese必须先启动 |
| keep_none_chinese_in_first_letter | 第一个字母保持非中文字母,例如:刘德华AT2016- > ldhat2016,默认值:true |
| keep_none_chinese_in_joined_full_pinyin | 保留非中文字母加入完整拼音,例如:刘德华2016- > liudehua2016,默认:false |
| none_chinese_pinyin_tokenize | 打破非中国信成单独的拼音项,如果他们拼音,默认值:true,如:liudehuaalibaba13zhuanghan- > liu,de,hua,a,li,ba,ba,13,zhuang,han,注意:keep_none_chinese和keep_none_chinese_together应首先启用 |
| keep_original | 当启用此选项时,也会保留原始输入,默认值:false |
| lowercase | 小写非中文字母,默认值:true |
| trim_whitespace | 默认值:true |
| remove_duplicated_term | 当启用此选项时,将删除重复项以保存索引,例如:de的> de,默认值:false,注意:位置相关查询可能受影响 |
接下来,我们一个一个来尝试,看看每一个属性具体代表什么意思。
创建一个索引,使用三个分词器。
{ "index": { "number_of_shards": 5, "number_of_replicas": 0, "max_result_window": 100000000, "analysis": { "analyzer": {
"pinyin_analyzer_keyword": { "tokenizer": "keyword", "filter": "my_pinyin" }, "pinyin_analyzer_ik_smart": { "tokenizer": "ik_smart", "filter": "my_pinyin" }, "pinyin_analyzer_ik_max": { "tokenizer": "ik_max_word", "filter": "my_pinyin" } }, "filter": { "my_pinyin": { "type": "pinyin", "keep_first_letter": "false", "keep_separate_first_letter": "false", "keep_full_pinyin": "false", "keep_joined_full_pinyin": "false", "keep_none_chinese": "false", "keep_none_chinese_together": "false", "keep_none_chinese_in_first_letter": "false", "keep_none_chinese_in_joined_full_pinyin": "false", "none_chinese_pinyin_tokenize": "false", "keep_original": "false", "lowercase": "false", "trim_whitespace": "false", "remove_duplicated_term": "false" } } } } }
先看一下keyword、ik_smart、ik_max_word对“我们都是中国人。”的分词结果
{ "tokens": [ { "token": "我们都是中国人。", "start_offset": 0, "end_offset": 8, "type": "word", "position": 0 } ] }