Elasticsearch 的分词器 (Analyzer) 是什么?

推荐答案

Elasticsearch 的分词器(Analyzer)是用于将文本分解为词条(tokens)的工具。它通常由三个部分组成:字符过滤器(Character Filters)、分词器(Tokenizer)和词条过滤器(Token Filters)。分词器的主要作用是将输入的文本进行预处理、分词和后处理,以便于后续的搜索和索引操作。

本题详细解读

1. 字符过滤器(Character Filters)

字符过滤器在文本被分词之前对原始文本进行处理。它可以用于去除HTML标签、转换字符(如将&转换为and)等操作。Elasticsearch 提供了多种内置的字符过滤器,如 html_stripmapping 等。

2. 分词器(Tokenizer)

分词器是分词器的核心部分,负责将文本分解为单个词条。常见的分词器包括:

  • Standard Tokenizer:默认的分词器,按空格和标点符号分词。
  • Whitespace Tokenizer:按空格分词,不处理标点符号。
  • Keyword Tokenizer:将整个文本作为一个单独的词条输出。

3. 词条过滤器(Token Filters)

词条过滤器在分词器之后对词条进行进一步处理。常见的词条过滤器包括:

  • Lowercase Token Filter:将词条转换为小写。
  • Stop Token Filter:去除停用词(如 theis 等)。
  • Synonym Token Filter:将同义词映射为同一个词条。

4. 自定义分词器

Elasticsearch 允许用户根据需要自定义分词器。自定义分词器可以通过组合不同的字符过滤器、分词器和词条过滤器来实现。例如:

-- -------------------- ---- -------
--- ---------
-
  ----------- -
    ----------- -
      ----------- -
        --------------------- -
          ------- ---------
          -------------- ---------------
          ------------ -----------
          --------- ------------- -------
        -
      -
    -
  -
-

在这个例子中,my_custom_analyzer 是一个自定义分词器,它首先使用 html_strip 字符过滤器去除HTML标签,然后使用 standard 分词器进行分词,最后使用 lowercasestop 词条过滤器将词条转换为小写并去除停用词。

5. 使用场景

分词器在 Elasticsearch 中广泛应用于索引和搜索过程中。在索引时,分词器将文档中的文本字段分解为词条并存储在倒排索引中。在搜索时,相同的分词器将查询字符串分解为词条,以便与索引中的词条进行匹配。

通过合理配置和使用分词器,可以显著提高 Elasticsearch 的搜索性能和准确性。

纠错
反馈