文本分析

📌 基础概念:请先阅读 Mapping 与文本分析 了解文本分析的三步处理(字符过滤 → 分词 → Token 过滤)。

文本分析 #

文本分析是将原始文本转换为可搜索词项的过程。Easysearch 提供了丰富的分析组件,可以自由组合构建分析链。

语言分析器概览 #

Easysearch 为多种流行语言提供了开箱即用的语言分析器。这些分析器针对各自语言的特点进行了优化:

语言分析器特点支持清单
英文english移除所有格、词干提取
法文french移除省略、变音符号
德文german字符规范化(ä→a)
中文ikpinyin(需插件)分词、拼音✅ 扩展
日文需安装插件汉字、假名处理扩展
其他阿拉伯、西班牙、俄语等各语言优化

使用语言分析器 #

方法 1:在映射中指定

PUT /my_index
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "english"
      },
      "content": {
        "type": "text",
        "analyzer": "french"
      },
      "description": {
        "type": "text",
        "analyzer": "standard"
      }
    }
  }
}

方法 2:在搜索时指定

GET /my_index/_search
{
  "query": {
    "match": {
      "title": {
        "query": "quick brown fox",
        "analyzer": "english"
      }
    }
  }
}

⚠️ 重要:索引和搜索必须使用相同的分析器,才能正确匹配词条。

常用语言分析器详解 #

英语分析器 (english) #

处理特点:

  • 移除停用词:The, a, an, is, at 等
  • 词干提取:foxes → fox, jumped → jump, quickly → quick
  • 移除所有格:John’s → john
"The quick brown foxes jumped" → ["quick", "brown", "fox", "jump"]

法语分析器 (french) #

处理特点:

  • 移除法文停用词:le, la, les, de, du 等
  • 移除元音省略:l'qu'
  • 移除变音符号:café → cafe

德语分析器 (german) #

处理特点:

  • 德语停用词处理
  • 字符规范化:ä/ö/ü → a/o/u,ß → ss
  • 词干提取

标准分析器 (standard) #

默认分析器,语言通用:

  • 以 Unicode 边界为标准分词(空格、标点)
  • 转小写
  • 不删除停用词
  • 无语言特定的词干提取

当你无法确定文本所用语言,或文本包含多种语言时,用标准分析器。

分析链结构 #

一个完整的分析器(Analyzer)由三部分组成:

原始文本
    ↓
┌─────────────────────┐
│   字符过滤器        │  ← 预处理:移除 HTML、字符替换等
│ (Character Filters) │
└─────────────────────┘
    ↓
┌─────────────────────┐
│     分词器          │  ← 拆分:将文本切分为词项
│   (Tokenizer)       │
└─────────────────────┘
    ↓
┌─────────────────────┐
│   词元过滤器        │  ← 后处理:小写、词干、同义词等
│  (Token Filters)    │
└─────────────────────┘
    ↓
可搜索的词项 (Terms)

组件分类 #

组件类型作用数量限制常用示例
分析器预定义的完整分析链1 个standard、ik、pinyin
分词器将文本拆分为词项必须 1 个standard、whitespace、pattern
字符过滤器预处理原始文本0~多个html_strip、mapping
词元过滤器处理分词后的词项0~多个lowercase、stemmer、synonym
规范化器keyword 字段的字符级归一化0~1 个lowercase、自定义

快速参考 #

内置分析器 #

分析器说明适用场景
标准分析器(Standard)默认分析器,按单词边界分词通用英文文本
简单分析器(Simple)按非字母字符分词简单文本
空白分析器(Whitespace)仅按空白字符分词保留标点的场景
IK 中文分析器中文智能分词中文全文搜索
拼音分析器(Pinyin)中文转拼音拼音搜索
语言分析器(Language)特定语言优化多语言支持

常用分词器 #

分词器说明
标准分词器(Standard)Unicode 文本分割,适合大多数语言
空白分词器(Whitespace)仅按空白字符分割
N-gram 分词器生成字符级 n-gram
Edge N-gram 分词器从词首生成 n-gram,适合自动补全
正则分词器(Pattern)按正则表达式分割

常用词元过滤器 #

过滤器说明
小写过滤器(Lowercase)转换为小写
词干过滤器(Stemmer)提取词干
停用词过滤器(Stop)移除停用词
同义词过滤器(Synonym)同义词扩展
ASCII 折叠(ASCII Folding)移除变音符号
CJK 二元组(CJK Bigram)CJK 字符双字组合

规范化器(Normalizers) #

规范化器(Normalizer)类似分析器,但只输出单个词元,专用于 keyword 字段的字符级归一化。

规范化器说明
lowercase内置规范化器,将整个值转为小写
自定义规范化器组合字符过滤器和词元过滤器构建自定义归一化逻辑

详见 规范化器参考

选择分析器的建议 #

场景推荐分析器说明
英文内容english充分利用词干提取提升召回
多语言混合standard避免误判,通用分析
中文内容ik(需插件)专业分词效果更好
商品名称、品牌词standardkeyword避免过度分析
实验性选择使用 _analyze API 对比基于实际文本效果选择

测试分析器 #

使用 _analyze API 测试不同语言分析器的效果:

GET /_analyze
{
  "analyzer": "english",
  "text": "The quick brown foxes"
}

响应示例:

{
  "tokens": [
    { "token": "quick",   "position": 1 },
    { "token": "brown",   "position": 2 },
    { "token": "fox",     "position": 3 }
  ]
}

对比不同分析器:

GET /_analyze
{
  "analyzer": "english",
  "text": "The foxes jumped quickly"
}

结果:["fox", "jump", "quick"](停用词移除 + 词干提取)

GET /_analyze
{
  "analyzer": "standard",
  "text": "The foxes jumped quickly"
}

结果:["the", "foxes", "jumped", "quickly"](仅分词,不做语言处理)

自定义分析器 #

如果内置分析器不满足需求,可自定义:

PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_english": {
          "type": "custom",
          "tokenizer": "standard",
          "char_filter": ["html_strip"],
          "filter": [
            "lowercase",
            "stop",
            "snowball"
          ]
        }
      }
    }
  }
}

相关指南 #

深入学习文本分析主题: