文本分析是对非结构化文本进行转换的过程,转换成一种为搜索优化的结构化格式。
什么时候需要文本分析
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