问答题822/1053Elasticsearch中的分析器是什么?

难度:
2021-11-02 创建

参考答案:

Elasticsearch中的分析器(Analyzer)

Elasticsearch 中,分析器(Analyzer)是文本分析和处理的核心组件,它将原始文本转换为适合索引和搜索的结构。分析器的主要功能是:

  1. 分词(Tokenization):将文本拆分成单独的词项(tokens)。
  2. 去除停用词(Stop word removal):去除常见但没有实际意义的词(如“的”、“是”等)。
  3. 词干提取(Stemming):通过词干算法将词语还原为其词根(如将“running”转换为“run”)。
  4. 小写化(Lowercasing):将所有字符转换为小写字母以统一格式。

分析器的组件

一个 分析器(Analyzer)通常由三个部分组成:

  1. 字符过滤器(Character Filters):用于在分析之前对输入文本进行字符级别的过滤。例如,可以将 HTML 标签去除,或是替换特定字符。
  2. 分词器(Tokenizer):将输入文本分割成词项(tokens)。例如,将句子“我喜欢编程”分割成 ["我", "喜欢", "编程"]。
  3. 词项过滤器(Token Filters):对分词后的词项进一步处理,例如去除停用词、进行词干化等。

默认分析器和自定义分析器

1. 默认分析器

  • standard:标准分析器是 Elasticsearch 的默认分析器。它通过使用空格、标点符号等分割文本,并进行小写化等处理。该分析器是基于 Unicode 的,能够有效处理多种语言。

示例:

1{ 2 "query": { 3 "match": { 4 "message": "The quick brown fox" 5 } 6 } 7}

分析结果

  • 词项:["the", "quick", "brown", "fox"]

2. 自定义分析器

在实际应用中,默认分析器可能无法满足所有需求,尤其是需要对特定语言、字符集或应用场景进行优化时。因此,Elasticsearch 提供了自定义分析器的功能,可以根据需要调整字符过滤器、分词器和词项过滤器的组合。

自定义分析器可以通过 Elasticsearch 的 mapping 配置进行设置,或者通过 settings API 来进行修改。

自定义分析器的设置

1PUT /my_index 2{ 3 "settings": { 4 "analysis": { 5 "tokenizer": { 6 "my_custom_tokenizer": { 7 "type": "whitespace" 8 } 9 }, 10 "filter": { 11 "lowercase_filter": { 12 "type": "lowercase" 13 } 14 }, 15 "analyzer": { 16 "custom_analyzer": { 17 "type": "custom", 18 "tokenizer": "my_custom_tokenizer", 19 "filter": ["lowercase_filter"] 20 } 21 } 22 } 23 } 24}

在这个例子中,my_custom_tokenizer 是一个空格分词器,lowercase_filter 是一个小写转换器。custom_analyzer 是自定义的分析器,使用上述两个组件。

常见分析器和其用途

  1. standard:适用于大多数情况,能分割英语文本并进行小写化。
  2. simple:类似 standard 分析器,但它不会对标点符号进行处理。
  3. whitespace:只根据空白字符(如空格、换行符)来分词,不进行其他处理。
  4. keyword:整个输入文本作为单个词项存储,适用于关键词索引,不进行分词。
  5. pattern:使用正则表达式来定义分词规则。
  6. stop:去除常见的停用词(如“and”、“the”等),可以根据自定义停用词列表进行调整。
  7. snowball:用于英语等语言的词干化,支持多种语言。
  8. edge_ngram:用于建议功能,通过前缀分词(即从开头字符开始分词)来加速搜索。

示例:自定义分词器与分析器

假设你想创建一个只使用空格分隔的分析器,并对每个词项进行小写化处理,可以按照如下方式定义:

1PUT /my_index 2{ 3 "settings": { 4 "analysis": { 5 "tokenizer": { 6 "my_whitespace_tokenizer": { 7 "type": "whitespace" 8 } 9 }, 10 "filter": { 11 "lowercase_filter": { 12 "type": "lowercase" 13 } 14 }, 15 "analyzer": { 16 "my_custom_analyzer": { 17 "type": "custom", 18 "tokenizer": "my_whitespace_tokenizer", 19 "filter": ["lowercase_filter"] 20 } 21 } 22 } 23 }, 24 "mappings": { 25 "properties": { 26 "content": { 27 "type": "text", 28 "analyzer": "my_custom_analyzer" 29 } 30 } 31 } 32}
  • 该设置使用了一个基于 whitespace 的分词器,该分词器仅使用空格分隔输入文本。
  • 然后,它使用 lowercase 过滤器将所有词项转换为小写字母。
  • my_custom_analyzer 是这个分析器的名称。

分析器的作用

  • 分词:将输入的文本分解为多个独立的词项,每个词项会在索引中存储以便搜索。
  • 去除噪音:通过停用词过滤器去除对搜索无意义的词汇。
  • 标准化:通过小写转换、词干化等手段规范化文本,使得相同的词在不同形式下仍能被索引和搜索。

最近更新时间:2024-12-12