分词器 接受一个字符串作为输入,将 这个字符串拆分成独立的词或 语汇单元(token) (可能会丢弃一些标点符号等字符),然后输出一个 语汇单元流(token stream) 。
一个analyzer分词器包含三个部分:
事实上,ElasticSearch中有一些内置分词器:
应该说,standard 分词器
是大多数西方语言
分词的一个合理的起点。 事实上,它构成了大多数特定语言分析器的基础,如 english 、french 和 spanish 分析器。 它也支持亚洲语言,只是有些缺陷(=.=To Be Honest , 你输入任何中文,都会被拆成一个一个的文字来分词,简直不要太糟糕),你可以考虑通过 ICU 插件的方式使用 icu_analyzer
进行中文分词更合理。
附录有更详细的分词器列表。
作为REST的搜索引擎,ES可以直接 POST http://localhost:9200/_analyze
来查询分词的情况。
{
"text": "I'm going to Guangzhou museum",
"analyzer": "standard"
}
curl -X POST \
http://localhost:9200/_analyze \
-d '{
"text": "I'\''m going to Guangzhou museum",
"analyzer": "standard"
}'
curl或者postman都可以:
Elasticsearch的 ICU 分析器插件 使用 国际化组件 Unicode (ICU) 函数库提供丰富的处理 Unicode 工具。 这些包含对处理亚洲语言
特别有用的 icu_分词器
,还有大量对除英语外其他语言进行正确匹配和排序所必须的分词过滤器。
ICU 插件是处理英语之外语言的必需工具,非常推荐你安装并使用它,不幸的是,因为是基于额外的 ICU 函数库, 不同版本的ICU插件可能并不兼容
之前的版本,当更新插件的时候,你需要重新索引你的数据(=。=根据你的ES版本替换后面的版本号,例如我是6.8.1,则用6.8.1,你用7.3.0就用7.3.0,类推)。
#自动安装
sudo bin/elasticsearch-plugin install analysis-icu
#手动安装
(自行下载)https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-6.8.1.zip
(Linux)sudo bin/elasticsearch-plugin install file:///path/to/plugin.zip
(Windows)bin\ elasticsearch-plugin.bat install file:///C:\Users\Administrator\Downloads\analysis-icu-6.8.1.zip
#安装成功
[=================================================] 100%??
-> Installed analysis-icu
{
"text": "基于ELK打造强大的日志收集分析系统(springboot2+logback+logstash+elasticsearch+kibana)",
"analyzer": "icu_analyzer"
}
{
"tokens": [
{
"token": "基于",
"start_offset": 0,
"end_offset": 2,
"type": "" ,
"position": 0
},
{
"token": "elk",
"start_offset": 2,
"end_offset": 5,
"type": "" ,
"position": 1
},
{
"token": "打造",
"start_offset": 5,
"end_offset": 7,
"type": "" ,
"position": 2
},
{
"token": "强大",
"start_offset": 7,
"end_offset": 9,
"type": "" ,
"position": 3
},
{
"token": "的",
"start_offset": 9,
"end_offset": 10,
"type": "" ,
"position": 4
},
{
"token": "日志",
"start_offset": 10,
"end_offset": 12,
"type": "" ,
"position": 5
},
{
"token": "收集",
"start_offset": 12,
"end_offset": 14,
"type": "" ,
"position": 6
},
{
"token": "分析",
"start_offset": 14,
"end_offset": 16,
"type": "" ,
"position": 7
},
{
"token": "系统",
"start_offset": 16,
"end_offset": 18,
"type": "" ,
"position": 8
},
{
"token": "springboot2",
"start_offset": 19,
"end_offset": 30,
"type": "" ,
"position": 9
},
{
"token": "logback",
"start_offset": 31,
"end_offset": 38,
"type": "" ,
"position": 10
},
{
"token": "logstash",
"start_offset": 39,
"end_offset": 47,
"type": "" ,
"position": 11
},
{
"token": "elasticsearch",
"start_offset": 48,
"end_offset": 61,
"type": "" ,
"position": 12
},
{
"token": "kibana",
"start_offset": 62,
"end_offset": 68,
"type": "" ,
"position": 13
}
]
}
{
"text": "北京大学与解放军总医院第一附属医院妇产科",
"analyzer": "icu_analyzer"
}
之前有个设想
:北京大学,分词器会分一个北京一个大学和一个北京大学
结果发现:太天真了,根本没有北京大学这个分词。。。。。。
请看下文结果
:
{
"tokens": [
{
"token": "北京",
"start_offset": 0,
"end_offset": 2,
"type": "" ,
"position": 0
},
{
"token": "大学",
"start_offset": 2,
"end_offset": 4,
"type": "" ,
"position": 1
},
{
"token": "与",
"start_offset": 4,
"end_offset": 5,
"type": "" ,
"position": 2
},
{
"token": "解放",
"start_offset": 5,
"end_offset": 7,
"type": "" ,
"position": 3
},
{
"token": "军",
"start_offset": 7,
"end_offset": 8,
"type": "" ,
"position": 4
},
{
"token": "总",
"start_offset": 8,
"end_offset": 9,
"type": "" ,
"position": 5
},
{
"token": "医院",
"start_offset": 9,
"end_offset": 11,
"type": "" ,
"position": 6
},
{
"token": "第一",
"start_offset": 11,
"end_offset": 13,
"type": "" ,
"position": 7
},
{
"token": "附属",
"start_offset": 13,
"end_offset": 15,
"type": "" ,
"position": 8
},
{
"token": "医院",
"start_offset": 15,
"end_offset": 17,
"type": "" ,
"position": 9
},
{
"token": "妇产科",
"start_offset": 17,
"end_offset": 20,
"type": "" ,
"position": 10
}
]
}
中文分词器,听说Elastic Stack 8.0会自带,但是还没release,静候佳音吧。
Smart Chinese Analysis插件将Lucene的Smart Chinese分析模块集成到elasticsearch中。
提供中文或混合中英文本的分析器。 该分析器使用概率知识来查找简体中文文本的最佳分词。 首先将文本分成句子,然后将每个句子分割成单词。
sudo bin/elasticsearch-plugin install analysis-smartcn