ElasticSearch-分词器
分词器(Tokenizer) 是 Elasticsearch 中用于将文本拆分为词项(Token)的核心组件
作用
分词器的主要作用是将输入的文本拆分为独立的词项(Token),以便后续的索引和搜索操作。例如,将句子 "Elasticsearch is great"
拆分为 ["elasticsearch", "is", "great"]
组成
- 字符过滤器(Character Filters):
- 对原始文本进行预处理,如去除 HTML 标签、替换字符等。
- 分词器(Tokenizer):
- 将文本拆分为词项。
- 词项过滤器(Token Filters):
- 对分词后的词项进行进一步处理,如小写转换、去除停用词、同义词扩展等。
工作流程
-
字符过滤(Character Filters)
- 对原始文本进行预处理。
- 常见的字符过滤器包括:
- HTML Strip Character Filter:去除 HTML 标签。
- Mapping Character Filter:替换字符(如将
&
替换为and
)。 - Pattern Replace Character Filter:使用正则表达式替换字符。
-
分词(Tokenizer)
- 将文本拆分为词项。
- 常见的分词器包括:
- Standard Tokenizer:按空格和标点符号分词。
- Whitespace Tokenizer:按空格分词。
- Keyword Tokenizer:将整个文本作为一个词项。
- Pattern Tokenizer:使用正则表达式分词。
- N-Gram Tokenizer:将文本拆分为 N 元语法(如
"quick"
拆分为["qu", "ui", "ic", "ck"]
)。
-
词项过滤(Token Filters)
- 对分词后的词项进行进一步处理。
- 常见的词项过滤器包括:
- Lowercase Token Filter:将词项转换为小写。
- Stop Token Filter:去除停用词(如
"the"
、"is"
)。 - Synonym Token Filter:扩展同义词(如将
"quick"
扩展为["quick", "fast"]
)。 - Stemmer Token Filter:将词项转换为词干(如将
"running"
转换为"run"
)。
内置分词器
Elasticsearch 提供了多种内置分词器,可以直接使用。例如:
- Standard Analyzer:包含 Standard Tokenizer、Lowercase Token Filter。
- Whitespace Analyzer:包含 Whitespace Tokenizer。
- Keyword Analyzer:包含 Keyword Tokenizer。
使用
创建自定义分词器
PUT user/_settings
{
"analysis": {
"analyzer": {
"my_analyzer":{
"type":"custom",
"char_filter": ["html_strip"],
"tokenizer": "standard",
"filter": ["lowercase", "stop"]
}
}
}
}
注意创建前要关闭索引
POST user/_close
,创建后再打开POST user/_open
为指定字段设置分词器
PUT user/_mappings
{
"properties": {
"msg": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
测试分词器
GET user/_analyze
{
"analyzer": "my_analyzer",
"text": "<p>Elasticsearch is GREAT!</p>"
}