1. Analysis 简介
理解elasticsearch的ngram首先需要了解elasticsearch中的analysis。在此我们快速回顾一下基本原理:
当一个文档被索引时,每个field都可能会创建一个倒排索引(如果mapping的时候没有设置不索引该field)。倒排索引的过程就是将文档通过analyzer分成一个一个的term,每一个term都指向包含这个term的文档集合。当查询query时,elasticsearch会根据搜索类型决定是否对query进行analyze,然后和倒排索引中的term进行相关性查询,匹配相应的文档
analyzer = CharFilters(0个或多个) + Tokenizer(恰好一个) + TokenFilters(0个或多个)
2. index analyzer VS search analyzer
如果mapping
中只设置了一个analyzer,那么这个analyzer
会同时用于索引文档和搜索query
。当然索引文档和对query进行analysis
也可以使用不同的analyzer
一个特殊的情况是有的query是需要被analyzed,有的并不需要。例如match query
会先用search analyzer
进行分析,然后去相应field
的倒排索引进行匹配。而term query
并不会对query内容进行分析,而是直接和相应field的倒排索