搜索引擎知识介绍和相关框架
什么是搜索:在海量信息中获取咱们想要的信息
传统作法:
一、文档中使用系统的Find查找
二、mysql中使用like模糊查询
问题:
一、海量数据中不能及时响应,少许数据能够经过传统的MySql创建索引解决
二、一些无用词不能进行过滤,无法分词
三、数据量大的话难以拓展
四、相同的数据难以进行类似度最高的进行排序
搜索引擎:
一、存储非结构化的数据
二、快速检索和响应咱们须要的信息,快-准
三、进行相关性的排序,过滤等
四、能够去掉停用词(没有特殊含义的词,好比英文的a,is等,中文: 这,的,是等),框架通常支持能够自定义停用词java
经常使用框架:
一、Lucene
Apache下面的一个开源项目,高性能的、可扩展的工具库,提供搜索的基本架构;
若是开发人员需用使用的话,需用本身进行开发,成本比较大,可是性能高mysql
二、solr
Solr基于Lucene的全文搜索框架,提供了比Lucene更为丰富的功能,
同时实现了可配置、可扩展并对查询性能进行了优化
创建索引时,搜索效率降低,实时索引搜索效率不高
数据量的增长,Solr的搜索效率会变得更低,适合小的搜索应用,对应java客户端的是solrjweb
三、elasticSearch
基于Lucene的搜索框架, 它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口
上手容易,拓展节点方便,可用于存储和检索海量数据,接近实时搜索,海量数据量增长,搜索响应性能几乎不受影响;
分布式搜索框架,自动发现节点,副本机制,保障可用性sql
elasticSearch主要特色服务器
一、特色:全文检索,结构化检索,数据统计、分析,接近实时处理,分布式搜索(可部署数百台服务器),处理PB级别的数据
搜索纠错,自动完成
二、使用场景:日志搜索,数据聚合,数据监控,报表统计分析
三、国内外使用者:维基百科,Stack Overflow,GitHub架构