Analysis【分析,动词】表示将文本处理转换为一系列短语的过程,这个过程有两处会用到:
建立倒排索引:数据写入时,Analyzer【分词器,名词】会将数据解析成多个短语【英文文档中叫做tokens or terms】,用这些短语建立倒排索引;
查询:查询时,分词器将查询条件解析成多个短语从倒排索引中查询数据;
ES 预置了很多分词器,很遗憾,没有中文分词器,由于笔者也是刚开始探索,暂不深入研究。
- 可以设置全局默认分词器
- 也可以在定义Document【可以理解为数据类型,对应RDB中的表】时指定,以上两处的分词器可以相同【参数
analyzer
】,也可以分别指定【参数search_analyzer
】
- 查询分析器可以在查询语句中指定
以上分析器在使用时,优先级依次提高;
Analysis 由多个过程组成,ES 用Character filter
,Tokenizer
,Token filter
封装了这些过程,这三个概念在 ES 中是比 Analyzer 更低一层的概念。
Character filter [pre process]
字符过滤器接收原始的输入并做一些字符添加、替换、删除操作,比如 HTML 中的转义字符需要替换为实际字符;一个分词器中可以有零至多个字符过滤器,多个过滤器按顺序执行;
Tokenizer [process]
短语分割器将字符过滤处理完的数据流,并将其分割为独立的短语,输出 token 流数据。比如空格分割器,将文本"Quick brown fox!"
分割为 [quick, brown, fox!]
。
Token filter [post process]
短语过滤器对上一步的短语流做一些添加、替换、删除操作,比如一些虚词 a, the, and 等,对分析没有太大的影响,可以将其去掉。