全文检索 - 1、技术选型和架构设计

1. 相关概念

  • 全文检索
    一种将文件中或者数据库中所有文本与检索项匹配的文字资料检索方法,对全文数据的检索。

  • Lucene
    Lucene 是一个 JAVA 搜索类库,它本身并不是一个完整的解决方案,需要额外的开发工作。

  • Elasticsearch
    ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,是最受欢迎的企业搜索引擎。

  • Solr
    Solr是Apache Lucene项目的开源企业搜索平台。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。

2. 背景

1.大数据背景下数据量的积累与数据应用疲软矛盾一直存在,传统企业的数据存储存在以下问题:
问题1:由于模型受限,传统企业的数据大多存储在关系型数据库mysql、Oracle,非结构化数据存储在MongoDB中。数据量也能积累到TB甚至PB级。
只能进行结构化的检索类似“ select * from table where col like ‘%xxx%’ ”显然不能满足纷繁复杂的业务需求。
问题2:数据是死数据,数据的BI可视化展示需要专业团队开发,但不能得到很好的分析效果。
以上问题形成了数据量累计到一定量,但数据得不到很好的应用分析之间的矛盾。

2.在保持数据库不动的同时,新增全文检索,更好、更快的从亿万数据中获取检索服务。不想抛弃原有数据存储结构,想在原有数据存储的基础上新增全文搜索。

3. 技术选型

1、Elasticsearch与Solr的优缺点
1)、ElasticSearch的优缺点
优点
Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。
Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。
处理多租户不需要特殊配置,而Solr则需要更多的高级设置。
Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。
各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。
缺点
只有一名开发者(当前Elasticsearch GitHub组织已经不只如此,已经有了相当活跃的维护者)
还不够自动(不适合当前新的Index Warmup API)

2)、Solr的优缺点
优点
Solr有一个更大、更成熟的用户、开发和贡献者社区。
支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。
Solr比较成熟、稳定。
不考虑建索引的同时进行搜索,速度更快。
缺点
建立索引时,搜索效率下降,实时索引搜索效率不高。

2、Elasticsearch与Solr的性能比较
1)、当单纯的对已有数据进行搜索时,Solr更快
全文检索 - 1、技术选型和架构设计_第1张图片

2)、当实时建立索引时, Solr会产生io阻塞,查询性能较差 。
全文检索 - 1、技术选型和架构设计_第2张图片

3)、随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。
全文检索 - 1、技术选型和架构设计_第3张图片

3、选型结果
ElasticSearch很好的支持实时搜索,且数据量增加时性能平稳,并且支持集群的扩展。最终选定使用ElasticSearch

5. 架构设计

架构设计图如下:
全文检索 - 1、技术选型和架构设计_第4张图片

缓存层
缓存层使用Redis,当用户请求条件命中缓存时,优先从缓存中读取数据,减少ES集群检索的频率。需要注意缓存的有效时间和数据不一致问题。

ES检索层
检索层使用ElasticSearch集群,可动态扩展。只存储需要检索的数据,非检索数据存储到基础数据层。

基础数据层
基础数据层使用MySQL存储。

下一章 全文检索 - 2、Elasticsearch安装(head插件、ik分词器安装)

你可能感兴趣的:(大数据)