加载中

文本分析

文本分析 是将非结构化文本(例如电子邮件正文或产品描述)转换为针对搜索进行了优化的结构化格式的过程。

文本分析使 Elasticsearch 能够执行全文搜索,即搜索返回所有 相关 结果,而不仅仅是精确匹配的结果。例如,如果您搜索 Quick fox jumps,您可能希望找到包含 A quick brown fox jumps over the lazy dog 的文档,并且您可能还希望找到包含相关词汇(如 fast foxfoxes leap)的文档。

Elasticsearch 在索引或搜索 text 字段时会执行文本分析。如果您的索引不包含 任何 text 字段,则无需进行进一步设置;您可以跳过本节中的页面。如果您 确实 使用了 text 字段,或者您的文本搜索结果不如预期,配置文本分析通常会有所帮助。如果您使用 Elasticsearch 来执行以下操作,也应该研究一下分析配置:

  • 构建搜索引擎
  • 挖掘非结构化数据
  • 针对特定语言微调搜索
  • 执行词典学或语言学研究

分析通过 分词 (tokenization) 使全文搜索成为可能:即将文本拆分为更小的块,称为 词元 (tokens)。在大多数情况下,这些词元是单个单词。

如果您将短语 the quick brown fox jumps 作为单个字符串进行索引,而用户搜索 quick fox,则不会被视为匹配。但是,如果您对该短语进行分词并将每个单词单独索引,查询字符串中的术语就可以单独查找。这意味着它们可以被 quick foxfox brown 或其他变体的搜索所匹配。

分词支持对单个术语进行匹配,但每个词元仍然是字面匹配。这意味着:

  • 搜索 Quick 不会匹配 quick,即使您可能希望这两个术语能相互匹配
  • 尽管 foxfoxes 共享同一个词根,但搜索 foxes 不会匹配 fox,反之亦然。
  • 搜索 jumps 不会匹配 leaps。虽然它们不共享词根,但它们是同义词且含义相似。

为了解决这些问题,文本分析可以将这些词元 归一化 (normalize) 为标准格式。这使您能够匹配与搜索词不完全相同、但足够相似以至于仍然相关的词元。例如:

  • Quick 可以转换为小写:quick
  • foxes 可以进行 词干提取 (stemmed),即还原为词根:fox
  • jumpleap 是同义词,可以作为同一个词进行索引:jump

为确保搜索词按预期匹配这些单词,您可以对查询字符串应用相同的分词和归一化规则。例如,搜索 Foxes leap 可以归一化为搜索 fox jump

文本分析由 分析器 (analyzer) 执行,这是一套用于管理整个过程的规则。

Elasticsearch 包含一个默认分析器,称为 标准分析器 (standard analyzer),它开箱即用,适用于大多数用例。

如果您想定制搜索体验,可以选择不同的 内置分析器,甚至可以 配置自定义分析器。自定义分析器让您可以控制分析过程的每一步,包括:

  • 分词 之前 对文本的更改
  • 文本如何转换为词元
  • 在索引或搜索之前对词元进行的归一化更改
© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.