ElasticSearch自定义分析器-集成结巴分词插件
关于结巴分词 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": {
"mapping_filter": {
"type": "mapping",
"mappings_path": "mappings.txt"
}
}
}
}
}
文件默认存放config目录下,即config/ mappings.txt。
2. 结巴分词词元过滤器JiebaTokenFilter
JiebaTokenFilter接受一个SegMode参数,该参数有两个可选值:Index和Search。
我们预先定义两个词元过滤器:jieba_index_filter和jieba_search_filter。
PUT /my_index
{
"settings": {
"analysis": {
"filter": {
"jieba_index_filter": {
"type": "jieba",
"seg_mode": "index"
},
"jieba_search_filter": {
"type": "jieba",
"seg_mode": "search"
}
}
}
}
}
这两个词元过滤器将分别用于索引分析器和查询分析器。
3. stop 停用词词元过滤器
因分词词元过滤器JiebaTokenFilter并不处理停用词。因此我们在自定义分析器时,需要定义停用词词元过滤器来处理停用词。
Elastic Search提供了停用词词元过滤器,我们可以这样来定义:
PUT /my_index
{
"settings": {
"analysis": {
"filter": {
"stop_filter": {
"type": "stop",
"stopwords": ["and", "is", "the"]
}
}
}
}
}
也可以通过文件载入停用词列表
PUT /my_index
{
"settings": {
"analysis": {
"filter": {
"stop_filter": {
"type": "stop",
"stopwords_path": "stopwords.txt"
}
}
}
}
}
文件默认存放config目录下,即config/ stopwords.txt。
4. synonym 同义词词元过滤器
我们使用ElasticSearch内置同义词词元过滤器来实现同义词的功能。
PUT /my_index
{
"settings": {
"analysis": {
"filter": {
"synonym_filter": {
"type": "synonym",
"stopwords": [
"中文,汉语,汉字"
]
}
}
}
}
}
如果同义词量比较大时,推荐使用文件的方式载入同义词库。
PUT /my_index
{
"settings": {
"analysis": {
"filter": {
"synonym_filter ": {
"type": "synonym",
"stopwords_path": "synonyms.txt"
}
}
}
}
}
5. 重新定义分析器jieba_index和jieba_search
Elastic Search支持多级分词,我们使用whitespace分词作为分词器;并在词元过滤器加入定义好的Jiebie分词词元过滤器:jieba_index_filter和jieba_search_filter。
PUT /my_index
{
"settings": {
"analysis": {
"analyzer": {
"jieba_index": {
"char_filter": [
"mapping_filter"
],
"tokenizer": "whitespace",
"filter": [
"jieba_index_filter",
"stop_filter",
"synonym_filter"
]
},
"jieba_search": {
"char_filter": [
"mapping_filter"
],
"tokenizer": "whitespace",
"filter": [
"jieba_search_filter",
"stop_filter",
"synonym_filter"
]
}
}
}
}
}
注意,上面分析器的命名依然使用jieba_index和jieba_search,以便覆盖结巴分词插件提供的分析器。
当存在多个同名的分析器时,Elastic Search会优先使用索引配置中定义的分析器。
这样在代码调用层面便无需再更改。
下面是完整的配置:
PUT /my_index
{
"settings": {
"analysis": {
"char_filter": {
"mapping_filter": {
"type": "mapping",
"mappings_path": "mappings.txt"
}
}
"filter": {
"synonym_filter ": {
"type": "synonym",
"stopwords_path": "synonyms.txt"
},
"stop_filter": {
"type": "stop",
"stopwords_path": "stopwords.txt"
},
"jieba_index_filter": {
"type": "jieba",
"seg_mode": "index"
},
"jieba_search_filter": {
"type": "jieba",
"seg_mode": "search"
}
}
"analyzer": {
"jieba_index": {
"char_filter": [
"mapping_filter"
],
"tokenizer": "whitespace",
"filter": [
"jieba_index_filter",
"stop_filter",
"synonym_filter"
]
},
"jieba_search": {
"char_filter": [
"mapping_filter"
],
"tokenizer": "whitespace",
"filter": [
"jieba_search_filter",
"stop_filter",
"synonym_filter"
]
}
}
}
}
}
参考资料:
https://www.elastic.co/guide/en/elasticsearch/reference/2.3/index.html
http://www.tuicool.com/articles/eUJJ3qF
ElasticSearch自定义分析器-集成结巴分词插件的更多相关文章
- 在ElasticSearch中使用 IK 中文分词插件
我这里集成好了一个自带IK的版本,下载即用, https://github.com/xlb378917466/elasticsearch5.2.include_IK 添加了IK插件意味着你可以使用ik ...
- Elasticsearch自定义分析器
关于分析器 ES中默认使用的是标准分析器(standard analyzer).如果需要对某个字段使用其他分析器,可以在映射中该字段下说明.例如: PUT /my_index { "mapp ...
- Simple: SQLite3 中文结巴分词插件
一年前开发 simple 分词器,实现了微信在两篇文章中描述的,基于 SQLite 支持中文和拼音的搜索方案.具体背景参见这篇文章.项目发布后受到了一些朋友的关注,后续也发布了一些改进,提升了项目易用 ...
- python jieba分词(结巴分词)、提取词,加载词,修改词频,定义词库 -转载
转载请注明出处 “结巴”中文分词:做最好的 Python 中文分词组件,分词模块jieba,它是python比较好用的分词模块, 支持中文简体,繁体分词,还支持自定义词库. jieba的分词,提取关 ...
- elasticsearch之分词插件使用
elasticsearch对英文会拆成单个单词,对中文会拆分成单个字.下面来看看是不是这样. 首先测试一下英文: GET /blog/_analyze { "text": &quo ...
- Elasticsearch 自定义多个分析器
分析器(Analyzer) Elasticsearch 无论是内置分析器还是自定义分析器,都由三部分组成:字符过滤器(Character Filters).分词器(Tokenizer).词元过滤器(T ...
- ElasticSearch(三) ElasticSearch中文分词插件IK的安装
正因为Elasticsearch 内置的分词器对中文不友好,会把中文分成单个字来进行全文检索,所以我们需要借助中文分词插件来解决这个问题. 一.安装maven管理工具 Elasticsearch 要使 ...
- Elasticsearch如何安装中文分词插件ik
elasticsearch-analysis-ik 是一款中文的分词插件,支持自定义词库. 安装步骤: 1.到github网站下载源代码,网站地址为:https://github.com/medcl/ ...
- Windows10安装Elasticsearch IK分词插件
安装插件 cmd切换到Elasticsearch安装目录下 C:\Users\Administrator>D: D:\>cd D:\Program Files\Elastic\Elasti ...
随机推荐
- PC上的番茄工作法软件 Pomodairo 1.9 详细攻略
http://www.zhantuo.com/archives/673155 番茄钟软件 Pomodairo 1.9: 我觉得这款软件特别好,完全符合番茄工作法的要求. 你可以通过add new 来增 ...
- .net/c# RabbitMQ 连接断开处理-断线重连(转载)
Rabbitmq 官方给的NET consumer示例代码如下,但使用过程,会遇到connection断开的问题,一旦断开,这个代码就会报错,就会导致消费者或者生产者挂掉. 下图是生产者发送消息,我手 ...
- Android SharedPreferences的应用
//定义 SharedPreferences share = getSharedPreferences("perference",MODE_PRIVATE); //取值 Strin ...
- failed to load selinux policy freezing
一.原因: 在修改selinux配置文件时输入并保存了一个错误的配置参数. 二.挽救: 1. 重启系统. 2. 在启动选项上按 e. 3. 进入grub编辑页面. 4. 向下移动光标至fi下一行. 5 ...
- 开源的报表系统easyreport的部署
https://github.com/xianrendzw/EasyReport/blob/master/docs/manual/version2_0.md
- IE兼容模式下 SCRIPT1028: 缺少标识符、字符串或数字
例如下面一段代码 var a = { x: 1, y: 2, }; alert(a.x); 如果在IE的兼容性视图(IE7文档模式)下,会报告下面的错误: SCRIPT1028: 缺少标识符.字符串或 ...
- CSS实现超级链接需要通过双击后跳转
超级链接需要双击后跳转如何实现. CSS代码.test3 span { position: relative;}.test3 span a { position: relative;z-index: ...
- Spring Hello World
1. 概述 Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布. 1.1 依赖注入 1.2 ...
- ADO.NET 连接方式进行数据库访问
转自:http://www.cnblogs.com/oneword/archive/2010/09/10/1823414.html 连接到数据源 连接到数据源需要使用两步: 1.创建连接字符串 2.使 ...
- GPIO实验(一)
目标:点亮LED1.看原理图,找到对应的引脚和寄存器2.a.配置寄存器为输入/出引脚 GPFCON[9:8]=0b01 b.设置输出高/低电平 GPDAT[4]=0b0 1.预处理2.编 ...