elasticsearch与全文索引扫盲篇1

1. 传统数据库搜索的弊端

1).要对被搜索字段的文本进行全部扫描,效率太低.比如商品描述,如果内容上千字的话,需要从头到尾全盘扫描.
2).不能分词检索.只能匹配连续的内容.比如:搜索关键词:中国移动联通,那么不能匹配:中国移动,中国联通等.

2. 反向索引
如果索引总能够保存从字符串到文件的映射,则会大大提高搜索速度。
由于从字符串到文件的映射是文件到字符串映射的反向过程,于是保存这种信息的索引称为反向索引。

反向索引保存的信息(词典-倒排表)
假设我的文档集合里面有100篇文档,为了方便表示,我们为文档编号从1到100,得到下面的结构
null

左边保存的是一系列字符串,称为词典。
每个字符串都指向包含此字符串的文档(Document)链表,此文档链表称为倒排表(Posting List)。
有了索引,便使保存的信息和要搜索的信息一致,可以大大加快搜索的速度。

反向索引查询示例
比如说,我们要寻找既包含字符串“lucene”又包含字符串“solr”的文档,我们只需要以下几步:
null
取出包含字符串“lucene”的文档链表。
取出包含字符串“solr”的文档链表。
通过合并链表,找出既包含“lucene”又包含“solr”的文件。

反向索引的优缺点
缺点:加上新建索引的过程,全文检索不一定比顺序扫描快,尤其是在数据量小的时候更是如此。而对一个很大量的数据创建索引也是一个很慢的过程。
优点:顺序扫描是每次都要扫描,而全文索引可一次索引,多次使用;检索速度快。