文本分析概述编辑

文本分析使 Elasticsearch 能够执行全文搜索,其中搜索返回所有*相关*结果,而不仅仅是完全匹配的结果。

如果您搜索 Quick fox jumps,您可能希望找到包含 A quick brown fox jumps over the lazy dog 的文档,您可能还希望找到包含相关词语的文档,例如 fast foxfoxes leap

分词编辑

分析通过*分词*实现全文搜索:将文本分解成更小的块,称为*词条*。在大多数情况下,这些词条是单个词语。

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

规范化编辑

分词可以实现对单个词条的匹配,但每个词条仍然是按字面匹配的。这意味着

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

为了解决这些问题,文本分析可以将这些词条*规范化*为标准格式。这允许您匹配与搜索词条不完全相同但足够相似且仍然相关的词条。例如

  • Quick 可以转换为小写:quick
  • foxes 可以进行*词干提取*,或者简化为其词根:fox
  • jumpleap 是同义词,可以索引为一个词:jump

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

自定义文本分析编辑

文本分析由*分析器*执行,分析器是一组控制整个过程的规则。

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

如果您想定制搜索体验,可以选择其他*内置分析器*,甚至可以*配置自定义分析器*。自定义分析器允许您控制分析过程的每个步骤,包括

  • 分词*之前*对文本的更改
  • 文本如何转换为词条
  • 在索引或搜索之前对词条进行的规范化更改