文本分析概述
编辑文本分析概述编辑
文本分析使 Elasticsearch 能够执行全文搜索,其中搜索返回所有*相关*结果,而不仅仅是完全匹配的结果。
如果您搜索 Quick fox jumps
,您可能希望找到包含 A quick brown fox jumps over the lazy dog
的文档,您可能还希望找到包含相关词语的文档,例如 fast fox
或 foxes leap
。
分词编辑
分析通过*分词*实现全文搜索:将文本分解成更小的块,称为*词条*。在大多数情况下,这些词条是单个词语。
如果您将短语 the quick brown fox jumps
作为一个字符串进行索引,而用户搜索 quick fox
,则不会将其视为匹配项。但是,如果您对短语进行分词并分别索引每个词语,则可以单独查找查询字符串中的词条。这意味着它们可以与 quick fox
、fox brown
或其他变体的搜索匹配。
规范化编辑
分词可以实现对单个词条的匹配,但每个词条仍然是按字面匹配的。这意味着
- 搜索
Quick
将不会匹配quick
,即使您可能希望这两个词条都能互相匹配 - 尽管
fox
和foxes
共享相同的词根,但搜索foxes
将不会匹配fox
,反之亦然。 - 搜索
jumps
将不会匹配leaps
。虽然它们不共享词根,但它们是同义词,具有相似的含义。
为了解决这些问题,文本分析可以将这些词条*规范化*为标准格式。这允许您匹配与搜索词条不完全相同但足够相似且仍然相关的词条。例如
-
Quick
可以转换为小写:quick
。 -
foxes
可以进行*词干提取*,或者简化为其词根:fox
。 -
jump
和leap
是同义词,可以索引为一个词:jump
。
为了确保搜索词条按预期匹配这些词语,您可以对查询字符串应用相同的分词和规范化规则。例如,对 Foxes leap
的搜索可以规范化为对 fox jump
的搜索。
自定义文本分析编辑
文本分析由*分析器*执行,分析器是一组控制整个过程的规则。
Elasticsearch 包含一个默认分析器,称为*标准分析器*,它适用于大多数开箱即用的用例。
如果您想定制搜索体验,可以选择其他*内置分析器*,甚至可以*配置自定义分析器*。自定义分析器允许您控制分析过程的每个步骤,包括
- 分词*之前*对文本的更改
- 文本如何转换为词条
- 在索引或搜索之前对词条进行的规范化更改