一.搜索引擎
-
分类:全文、垂直
(1)全文搜索引擎
应用于:NLP、爬虫、大数据处理、网页处理、大数据处理
代表:Google、百度
(2)垂直搜索引擎
应用在有明确的搜索目的行为
代表:电商平台、OA、视频网站、地图网站 -
搜索引擎的要求
(1)查询快
高效的压缩算法
快速的编码和解码速度(2)搜索准
符合用户期待值高
评分算法:BM25,TF-IDF(3)检索结果丰富
召回率要求高
二.Lucene(全文搜索引擎)
目的:解决关系型数据库:性能差、不可靠、结果不准确(相关度低)等问题,实现手段:倒排索引
-
倒排索引的数据结构
数据结构:
1.包含这个关键词的document list
2.关键词在每个doc中出现的次数 TF term frequency
3.关键词在整个索引中出现的次数 IDF inverse doc frequency
4.关键词在当前doc中出现的次数
5.每个doc的长度,越长相关度越低
6.包含这个关键词的所有doc的平均长度 -
Lucene:jar包,就做了两件事:帮我们创建倒排索引,提供了复杂的API
Lucene:是单点的 -
如果用Lucene做集群实现搜索,会有那些问题
- 节点一旦宕机,节点数据丢失,后果不堪设想,可用性差。
- 自己维护,麻烦(自己创建管理索引),单台节点的承载请求的能力是有限的,需要人工做负载(雨露均沾)。
三、 Elastic search:分布式/高性能/高可用/可伸缩/易维护 ES≠搜索引擎
1. 分布式的搜索,存储和数据分析引擎。
2. 优点:
1. 面向开发者友好,屏蔽了Lucene的复杂特性,集群自动发现(cluster discovery)
2. 自动维护数据在多个节点上的建立
3. 会帮我做搜索请求的负载均衡
4. 自动维护冗余副本,保证了部分节点宕机的情况下仍然不会有任何数据丢失
5. ES基于Lucene提供了很多高级功能:复合查询、聚合分析、基于地理位置等。
6. 对于大公司,可以构建几百台服务器的大型分布式集群,处理PB级别数据;对于小公司,开箱即用,门槛低上手简单。
7. 相遇传统数据库,提供了全文检索,同义词处理(美丽的cls>漂亮的cls),相关度排名。聚合分析以及海量数据的近实时(NTR)处理,这些传统数据库完全做不到。
3. 应用领域:
1. 百度(全文检索、高亮、搜索推荐)
2. 各大网站的用户行为日志(用户点击、浏览、收藏、评论)
3. BI(Business Intelligence商业智能),数据分析:数据挖掘统计。
4. Github:代码托管平台,几千亿行代码
5. ELK:Elasticsearch(数据存储)、Logstash(日志采集)、Kibana(可视化)