es的分词器往往包括3个低级构建块包:
- character filters - 字符过滤器,可以添加、删除或更改字符来转换流,一个分析器可有多个字符过滤器;
- token filters - token过滤器,接受token流,并可以添加、删除或修改token,不允许更改每个token的位置或字符偏移量,一个分析器可有多个token过滤器,并按顺序应用。
- tokenizer - 标记器,接受字符流,将其分解成单独的标记,并输出标记流,一个分析器只能有一个标记器。
Elasticsearch提供的内置analyzers
Standard Analyzer
标准分析仪按照Unicode文本分段算法的定义,将文本分割成单词边界的分词。它删除了大多数标点符号,小写显示分词,并支持删除stop words。
Simple Analyzer
当遇到不是字母的字符时,简单的分析器会将文本分成条目。小写显示分词。
Whitespace Analyzer
空格分析器遇到任何空格字符时都会将文本分为多个项目。不会把分词转换为小写字母。
Stop Analyzer
停止分析仪和Simple Analyzer类似,但也支持stop words的删除。
Keyword Analyzer
一个“noop”分析器,它可以接受任何给定的文本,并输出完全相同的文本作为一个单词。
Pattern Analyzer
使用正则表达式拆分分词,支持lower-casing和stop words。
Language Analyzers
Elasticsearch提供许多语言特定的分析器,如英语或法语。
Fingerprint Analyzer
一个专门的分析仪,它可以创建一个可用于重复检测的指纹。
https://www.jianshu.com/p/13112fe5eaad
实战
对中文文本以英文逗号作为分隔符分词:
"这里有,最棒的ACG氛围,最有创意的Up主"
将分析器设置到索引上
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "simple"
}
}
}
}
}
获取分词结果
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "这里有,最棒的ACG氛围,最有创意的Up主"
}
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stop-analyzer.html
注意
es 节点层面的默认分词设置已经废弃,不支持了。就是说在elasticsearch.yml
配置诸如:
index:
analysis:
analyzer:
simple_analyzer:
type: simple
无效,会导致es启动失败:
********************************************************************************
*****
Found index level settings on node level configuration.
Since elasticsearch 5.x index level settings can NOT be set on the nodes
configuration like the elasticsearch.yaml, in system properties or command line
arguments.In order to upgrade all indices the settings must be updated via the
/${index}/_settings API. Unless all settings are dynamic all indices must be clo
sed
in order to apply the upgradeIndices created in the future should use index temp
lates
to set default values.
推荐在索引层面动态设置。
https://blog.csdn.net/yu280265067/article/details/71107658