ElasticSearch-分词器

ElasticSearch-分词器

起男 32 2025-03-04

ElasticSearch-分词器

分词器(Tokenizer) 是 Elasticsearch 中用于将文本拆分为词项(Token)的核心组件

作用

分词器的主要作用是将输入的文本拆分为独立的词项(Token),以便后续的索引和搜索操作。例如,将句子 "Elasticsearch is great" 拆分为 ["elasticsearch", "is", "great"]

组成

  1. 字符过滤器(Character Filters)
    • 对原始文本进行预处理,如去除 HTML 标签、替换字符等。
  2. 分词器(Tokenizer)
    • 将文本拆分为词项。
  3. 词项过滤器(Token Filters)
    • 对分词后的词项进行进一步处理,如小写转换、去除停用词、同义词扩展等。

工作流程

  1. 字符过滤(Character Filters)

    • 对原始文本进行预处理。
    • 常见的字符过滤器包括:
      • HTML Strip Character Filter:去除 HTML 标签。
      • Mapping Character Filter:替换字符(如将 & 替换为 and)。
      • Pattern Replace Character Filter:使用正则表达式替换字符。
  2. 分词(Tokenizer)

    • 将文本拆分为词项。
    • 常见的分词器包括:
      • Standard Tokenizer:按空格和标点符号分词。
      • Whitespace Tokenizer:按空格分词。
      • Keyword Tokenizer:将整个文本作为一个词项。
      • Pattern Tokenizer:使用正则表达式分词。
      • N-Gram Tokenizer:将文本拆分为 N 元语法(如 "quick" 拆分为 ["qu", "ui", "ic", "ck"])。
  3. 词项过滤(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>"
}