Text analysis 文本分析

965 阅读2分钟

文本分析是对非结构化文本进行转换的过程,转换成一种为搜索优化的结构化格式。

什么时候需要文本分析

Elasticsearch在索引或搜索text类型字段时执行文本分析。

如果你用text类型字段或者text搜索没有返回期望的结果,配置文本分析通常会有所帮助

文本分析概览(Text analysis overview)

文本分析使得能在Elasticsearch上执行全文索引,搜索时并不仅仅返回精确匹配还会返回相关的结果。

比如,当你搜索Quick fox jumps时,会返回A quick brown fox jumps over the lazy dog,可能你也想返回相关的语句 fast fox or foxes leap

Tokenization (分词)

把要给文本分解成小的chunks(tokens),很多时候时独立的单词。通过这种分析,实现全文索引。

如果用quick fox搜索 the quick brown fox jumps 是不匹配的。但是如果先切分词,然后再单独索引每个单词,查询字符串中的单词就可以被查到。

Normalization (标准化)

分词后可以使搜索匹配单独的terms,但是每一个token仍旧是完全匹配。比如:

  • Quick 不匹配 quick
  • fox不匹配foxes
  • jumps不匹配leaps

为了解决这个问题,text analysis 需要需要标准化这些tokens为标准的格式,这样才能匹配到不是完全一样的terms。

  • Quick 转换为小写 quick
  • foxes转换为根单词 fox
  • jump 与leap都能够被jump索引到

为了确保搜索词与预期词匹配,可以使用相同的tokenization 和normalization rules。

Customize text analysis (自定义文本分析)

文本分析由分析器(analyzer)执行,分析器包含一系列管理整个过程的规则。

Elasticsearch 包含一个默认的分析器 — standard analyzer,适用于大多数场景。

如果你想调整你的搜索体验,你可以选择不同的内置分析器或者自定义一个分析器。自定义分析器可以使你控制分析过程的每个步骤,包括:

  • 分词前改变输入text
  • text怎样转变为tokens
  • 在搜索或索引前标准化tokens