初识elasticsearch
1.1
elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容
在打车软件搜索附近的车

Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。官网地址:https://lucene.apache.org/ 。

elasticsearch
- 
- 
2010年Shay Banon 重写了Compass,取名为Elasticsearch。 

- 
一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能 
什么是elastic stack(ELK)?
- 
是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch 
什么是Lucene?
- 
是Apache的开源搜索引擎类库,提供了搜索引擎的核心API 
1)用户搜索数据,条件是title符合"%手机%"
2)逐行获取数据,比如id为1的数据
3)判断数据中的title是否符合用户搜索条件
4)如果符合则放入结果集,不符合则丢弃。回到步骤1
逐行扫描,也就是全表扫描,随着数据量增加,其查询效率也会越来越低。当数据量达到数百万时,就是一场灾难。
- 
- 
词条( Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条
创建倒排索引
- 
- 
创建表,每行数据包括词条、词条所在文档id、位置等信息 
- 
因为词条唯一性,可以给词条创建索引,例如hash表结构索引 
如图:

1)用户输入条件"华为手机"进行搜索。
2)对用户输入内容分词,得到词条:华为、手机。
3)拿着词条在倒排索引中查找,可以得到包含词条的文档id:1、2、3。
4)拿着文档id到正向索引中查找具体文档。
如图:

虽然要先查询倒排索引,再查询正向索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。
那么为什么一个叫做正向索引,一个叫做倒排索引呢?
- 
正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。 
- 
而倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程。 
是不是恰好反过来了?
正向索引:
- 
优点: - 
可以给多个字段创建索引 
- 
根据索引字段搜索、排序速度非常快 
 
- 
- 
缺点: - 
根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。 
 
- 
- 
优点: - 
根据词条搜索、模糊搜索时,速度非常快 
 
- 
- 
缺点: - 
只能给词条创建索引,而不是字段 
- 
无法根据字段做排序 
 
- 

例如:
- 
所有用户文档,就可以组织在一起,称为用户的索引; 
- 
所有商品的文档,可以组织在一起,称为商品的索引; 
- 
所有订单的文档,可以组织在一起,称为订单的索引; 

数据库的表会有约束信息,用来定义表的结构、字段的名称、类型等信息。因此,索引库中就有映射(mapping),是索引中文档的字段约束信息,类似表的结构约束。
并不是如此,两者各自有自己的擅长支出:
- 
Mysql:擅长事务类型操作,可以确保数据的安全和一致性 
- 
Elasticsearch:擅长海量数据的搜索、分析、计算 
- 
对安全性要求较高的写操作,使用mysql实现 
- 
对查询性能要求较高的搜索需求,使用elasticsearch实现 
- 
两者再基于某种方式,实现数据的同步,保证一致性 

 
                    
                



 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号