倒排索引
ES(Elasticsearch)是一个分布式全文搜索引擎,重点是全文搜索。加速数据的查询
要实现全文搜索的效果,不可能使用数据库中like操作去进行比对,这种效率太低了。ES设计了一种全新的思想,来实现全文搜索。具体操作过程如下:
- 将被查询的字段的数据全部文本信息进行查分,分成若干个词
- 将分词得到的结果存储起来,对应每条数据的id
- 当进行查询时,得到id值,然后根据id值就可以得到查询的结果数据了
根据上述过程,我们可以看到,搜索的过程经历了两次检索:
- 第一次是根据用户输入的内容的词条,去找到对应的文档 id
- 第二次是拿着文档 id 来找文档.
倒排索引为什么快
全文搜索中的分词结果关键字查询后得到的是数据的id,要想获得具体数据还要再次查询,因此这里为这种分词结果关键字起了一个全新的名称,叫做倒排索引。
与之对应的是正向索引(正排索引):正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。
之所以倒排索引快,因为正向索引中,得一行一行找,找到匹配的放到结果集中,而倒排索引就是反过来,基于词条创建索引,搜多的时候,就是根据词找到对应的文档(正向索引就是根据文档来找词)
ES的一些概念与MySQL对比
Mysql:擅长事务类型操作,可以确保数据的安全和一致性
Elasticsearch:擅长海量数据的搜索、分析、计算
在企业中,往往是两者结合使用:
● 对安全性要求较高的写操作,使用mysql实现
● 对查询性能要求较高的搜索需求,使用elasticsearch实现
● 两者再基于某种方式,实现数据的同步,保证一致性