目录
文本分析使Elasticsearch能够执行全文搜索,搜索将返回所有相关的结果,而不仅仅是精确匹配。
自定义文本分析(Customize text analysis)
文本分析使Elasticsearch能够执行全文搜索,搜索将返回所有相关的结果,而不仅仅是精确匹配。
如果您搜索 Quick fox jumps,您可能希望找到包含 A quick brown fox jumps over the lazy dog 的文档,您可能还想要包含相关词汇如 fast fox 或 foxes leap 的文档。
分词(Tokenization)
通过分词,分析使全文搜索成为可能:将文本拆分为称为标记的较小块。在大多数情况下,这些标记是单独的单词。
如果将短语 "the quick brown fox jumps" 作为单个字符串进行索引,而用户搜索 "quick fox",则不会被视为匹配。然而,如果对短语进行分词并单独索引每个单词,查询字符串中的术语可以被单独查找。这意味着它们可以通过搜索 "quick fox"、"fox brown" 或其他变体进行匹配。
规则化(Normalization)
分词使得能够在单个术语上进行匹配,但每个标记仍然被字面匹配。这意味着:
- 对于 Quick 的搜索不会匹配 quick,尽管您可能希望其中一个术语匹配另一个。
- 虽然 fox 和 foxes 共享相同的词根,但搜索 foxes 不会匹配 fox,反之亦然。
- 对于 jumps 的搜索不会匹配 leaps。虽然它们没有共同的词根,但它们是同义词,具有相似的含义。
为了解决这些问题,文本分析可以将这些标记规范化为标准格式。这使您能够匹配那些与搜索术语不完全相同但足够相似以仍然相关的标记。例如:
- Quick 可以转换为小写形式:quick。
- foxes 可以进行词干提取,或缩减为其词根:fox。
- jump 和 leap 是同义词,可以索引为一个词:jump。
为确保搜索术语按预期匹配这些单词,可以将相同的分词和规范化规则应用于查询字符串。例如,对于 Foxes leap 的搜索可以规范化为对 fox jump 的搜索。
自定义文本分析(Customize text analysis)
文本分析由分析器执行,它是管理整个过程的一组规则。
Elasticsearch包含一个默认的分析器,称为标准分析器,它在大多数情况下都能立即使用。
如果您想个性化搜索体验,可以选择不同的内置分析器,甚至配置一个自定义分析器。自定义分析器允许您控制分析过程的每个步骤,包括:
- 在标记化之前对文本进行的更改
- 将文本转换为标记的方式
- 在索引或搜索之前对标记进行的规范化更改