一、全文检索引擎的介绍
-
-》ELK:ElasticSearch+Logstash+Kibana
-》用于解决日志收集、日志分析处理、展示的日志分析平台 -》ES:日志的存储,聚合分析——全文检索引擎 -》Logstash:日志的收集 -》Kibana:日志分析展示工具
-
-》生活中的全文检索
-》查找某些不熟悉的东西,百度一下(网页搜索引擎:百度、搜狗、谷歌) 查找:生化武器 -》生化武器 -》武器 -》生化 -》生化细菌武器 -》站内搜索 -》电商-淘宝 -》新闻-新浪 -》工作-拉勾 -》OA:办公自动化系统 -》运营管理 -》管理工具 -》人员管理 -》需求:查询所有叫"张三"的人 -》常规的返回结果:张三 -》全文检索引擎: -》张三 -》张三大 -》大张三 -》张小三 -》财务管理
-》全文检索引擎与关系型数据库的应用有什么区别?
-》可行性:全文检索引擎和关系型数据库都可以实现 -》性能: -》RDBMS:随着数据量的增加,检索和存储的效率会逐渐降低 -》全文检索引擎:在同等的数据量条件下,检索和存储的效率几乎不变 -》假设:id,name,age,addr -》从一千万条数据中查询姓名中带有张三的人员信息 -》rdbms: -》select * from employee where name like %张三% -》全表扫描,挨个匹配 -》假设如果查找的是较长的地址字符串: 江苏省南京市玄武区某某街道某某小区某某栋某某层某某号 -》不能进行分词检索 -》全文检索引擎:倒排索引 1-生化危机电影 2-生化危机小说 3-生化危机海报 4-生化危机广告 -》将4条数据存储到全文检索引擎中 生化 1,2,3,4 危机 1,2,3,4 电影 1 小说 2 海报 3 广告 4 -》假设100万条数据,分词以后有1000万个词条 -》搜索:生化电影 -》生化:1,2,3,4 -》电影:1 -》将每个文本进行分词,然后通过索引进行检索的过程就叫做全文检索
-》常见的全文检索引擎
-》Lucene:就是一个jar包 -》优点: -》相对成熟,有很多实际的案例,Apache顶级项目,持续更新开发完善 -》只是一个类库,使用相对简单,有足够的定制和优化空间 -》经过优化,可以支持10亿+级别的检索 -》缺点: -》需要额外的开发工作 -》所有的分布式、可靠性都需要自己实现 -》数据量大,单台机器无法存放,自己解决大数据量的存储和检索问题 -》高性能分布式的索引如何构建? -》分布式存储?备份?数据通信?高可用? -》solr:基于Lucene的封装 -》优点 -》solr拥有强大的用户、开发者社区 -》支持多种索引、HTML、json、xml⋯⋯等多种纯文本格式 -》solr成熟稳定 -》不考虑索引的创建进行搜索,速度更快 -》缺点: -》构建索引时,搜索效率会下降,实时索引搜索效率不高 -》ES:基于Lucene的封装 -》优点: -》分布式的,不需要任何的组件,可零配置实现分布式集群 -》完全支持Lucene中的准实时的搜索 -》处理多租户,不需要任何特殊的配置 -》ES支持备份,节点对等的网络结构,让节点故障更容易解决 -》缺点: -》还不够自动化 -》只支持json -》对比Lucene: -》自动维护数据分布到多台机器的数据索引,自动将请求分布到对应的节点执行 -》自动维护数据的冗余副本 -》封装了更多高级的功能 -》复杂搜索 -》聚合分析 -》基于地理位置的搜索⋯⋯ -》对比solr -》当对已有数据进行检索,不需要创建索引时,solr更快 -》当进行实时的数据索引构建检索时,es的优势更大 -》随着数据量的增加,solr的搜索效率会变低,es相对区别不大 -》solr不适合准实时的搜索的应用 -》solr利用zookeeper实现分布式管理,es通过自带的分布式协调组件来实现 -》solr的功能更加强大,es的高级功能大部分需要通过第三方插件来提供 -》solr适用于传统的搜索解决方案,es适用于实时的搜索解决方案