文本分析概述

编辑

文本分析使 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 包括一个默认的分析器,称为标准分析器,它在大多数用例中都能很好地开箱即用。

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

  • 分词之前对文本进行的更改
  • 文本如何转换为词元
  • 在索引或搜索之前对词元进行的标准化更改