Elasticsearch的索引
正向索引和倒排索引
-
什么是正向索引?
传统的数据库采用正向索引,如MySQL将表中的id创建索引,正向索引在进行不是id为索引进行搜索的时候,会逐条进行查询,比方说
倒排索引上图的表格,数据库进行逐条查询,当扫描到搜索字的时候会将该行存入结果集当中,如果没有就会进行丢弃。
-
elasticsearch采用的就是倒排索引它将要搜索的数据进行划分:
-
文档(document):每条数据就是一个文档
-
词条(term):文档按照语义分成的词语
-
-
如上表,当用户用倒排索引进行搜索的时候,会划分一个新的索引表,将原来的数据当中的东西,通过关键字进行划分,当有相同的时候会在文档的后面增加上索引,当有新的时候会创建出来一行新的数据,依此类推。
-
当用户搜索的时候,如上图比方说小米和手机,会先将搜索词进行语义的划分,然后在词条列表当中进行查询,将包含这两个词条的文档id都进行列举,再根据文档id进行查询,最后根据匹配度对其进行排序,存到结果集当中。
-
总结:
什么是正向索引?
-
基于文档id创建索引。查询词条时必须先找到文档,而后判断是否包 含词条
什么是倒排索引?
-
对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条查询到文档id,而后获取到文档
-