关于结巴分词 ElasticSearch 插件:
https://github.com/huaban/elasticsearch-analysis-jieba
该插件由huaban开发。支持Elastic Search 版本<=2.3.5。
结巴分词分析器
结巴分词插件提供3个分析器:jieba_index、jieba_search和jieba_other。
- jieba_index: 用于索引分词,分词粒度较细;
- jieba_search: 用于查询分词,分词粒度较粗;
- jieba_other: 全角转半角、大写转小写、字符分词;
使用jieba_index或jieba_search分析器,可以实现基本的分词效果。
以下是最小配置示例:
{ "mappings": { "test": { "_all": { "enabled": false }, "properties": { "name": { "type": "string", "analyzer": "jieba_index", "search_analyzer": "jieba_index" } } } } }
在生产化境中,因为业务的需要,需要考虑实现以下功能:
- 支持同义词;
- 支持字符过滤器;
结巴插件提供的分析器jieba_index、jieba_search无法实现以上功能。
自定义分析器
当jieba_index、jieba_search分析器不满足生成环境的需求时,我们可以使用自定义分析器来解决以上问题。
分析器是由字符过滤器,分词器,词元过滤器组成的。
一个分词器允许包含多个字符过滤器+一个分词器+多个词元过滤器。
因业务的需求,我们需要使用映射字符过滤器来实现分词前某些字符串的替换操作。如将用户输入的c#替换为csharp,c++替换为cplus。
下面逐一介绍分析器各个组成部分。
1. 映射字符过滤器Mapping Char Filter
这个是Elastic Search内置的映射字符过滤器,位于settings –> analysis -> char_filter下:
PUT /my_index { "settings": { "analysis": { "char_filter": { "mapping_filter": { "type": "mapping", "mappings": [ "c# => csharp", "c++ => cplus" ] } } } } }
也可以通过文件载入字符映射表。
PUT /my_index { "settings": { "analysis": { "char_filter": { "<