Elasticsearch 分析器 由3部分组成:character filters 字符过滤器
、 tokenizers 分词器
和 token filters 标记过滤器
。
Elasticsearch 内置了一些的分析器供我们使用, 同时也允许我们自定义组合创建分析器。
-
character filters 字符过滤器
接收处理原始文本, 通过添加、删除或更改字符来转换流。例如,字符过滤器可用于将印度数字 (٠١٢٣٤٥٦٧٨٩)
转换为阿拉伯-拉丁数字 (0123456789)
,或从流中去除HTML
元素<b>
。
分析器可能有零个或多个
字符过滤器,它们按顺序应用。
-
tokenizers 分词器
接收一个字符流,将其分解为单个token
(通常是单个单词),并输出一个token
流。例如,whitespace 分词器
在看到任何空格时将文本分解为token
。它会将文本"Quick brown fox!"
转换为术语[Quick, brown, fox!]
。分词器还负责记录每个词条的顺序或位置以及该词条所代表的原始词的开始和结束字符偏移量。
分析器必须只有
一个
分词器。
-
token filters 标记过滤器
接收令牌流并可以添加、删除或更改令牌。例如,lowercase 过滤器
将所有标记转换为小写,stop 过滤器
从标记流中删除某些词,synonym 过滤器
将同义词引入标记流。令牌过滤器不允许更改每个令牌的位置或字符偏移量。
分析器可能有
零个或多个
令牌过滤器,它们按顺序应用。
自定义分析器
当内置分析器不能满足您的需求时,您可以使用适当组合创建一个自定义的分析器:
参数 | |
---|---|
type | 分析仪类型。接受内置分析器类型。对于自定义分析器,使用custom或省略此参数 |
tokenizer | 内置或定制的分词器。(必需的) |
char_filter | 可选的内置或自定义 字符过滤器数组。 |
filter | 可选的内置或自定义 令牌过滤器数组。 |
position_increment_gap | 当索引一个文本值数组时,Elasticsearch 在一个值的最后一个词和下一个值的第一个词之间插入一个假的“间隙”,以确保一个短语查询不匹配来自不同数组元素的两个词。默认为100 . 查看position_increment_gap 更多。 |
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"tokenizer": "standard",
"char_filter": [
"html_strip"
],
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
}
}
POST my-index-000001/_analyze
{
"analyzer": "my_custom_analyzer",
"text": "Is this <b>déjà vu</b>?"
}
内置分析器
-
标准分析器 Standard Analyzer
分析器是默认的standard分析器,如果没有指定则使用。它提供基于语法的标记化(基于 Unicode 文本分段算法)并且适用于大多数语言。POST _analyze { "analyzer": "standard", "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone." } [ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]
-
简单分析器 Simple Analyzer
simple每当遇到不是字母的字符时,分析器就会将文本分成术语 。它小写所有术语。POST _analyze { "analyzer": "simple", "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone." } [ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]
-
空白分析器 Whitespace Analyzer
whitespace每当遇到任何空白字符时,分析器都会将文本划分为术语 。它不会小写术语。POST _analyze { "analyzer": "whitespace", "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone." } [ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog's, bone. ]
-
停止分析器 Stop Analyzer
stop分析器类似于simple分析器 ,但支持去除停用词。PUT my-index-000001 { "settings": { "analysis": { "analyzer": { "my_stop_analyzer": { "type": "stop", "stopwords": ["the", "over"] } } } } } POST my-index-000001/_analyze { "analyzer": "my_stop_analyzer", "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone." } [ quick, brown, foxes, jumped, lazy, dog, s, bone ]
-
关键词分析器 Keyword Analyzer
把输入当做一个关键词, 所见即所得。POST _analyze { "analyzer": "keyword", "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone." } [ The 2 QUICK Brown-Foxes jumped over the lazy dog's bone. ]
-
模式分析器 Pattern Analyzer
分析器使用正则表达式
将pattern文本拆分为术语。正则表达式默认为\W+
。PUT my-index-000001 { "settings": { "analysis": { "analyzer": { "my_email_analyzer": { "type": "pattern", "pattern": "\\W|_", "lowercase": true } } } } } POST my-index-000001/_analyze { "analyzer": "my_email_analyzer", "text": "John_Smith@foo-bar.com" } [ john, smith, foo, bar, com ]
语言分析器 Language Analyzers
Elasticsearch 提供了许多特定于语言的分析器,例如english或 french。指纹分析器 Fingerprint Analyzer
分析fingerprint仪是一种专业分析仪,可创建可用于重复检测的指纹。