搜索系统,原来可以这么简单

上篇文章对Java工程师各个阶段学习要领做了个简单的总结,特别感谢各位朋友帮助转发扩散。这次,上干货。

项目名称:Springboot2.1+Solr7.5打造的企业级搜索平台

项目本月开源,使用的技术,均属于业界最新版本,支持Java8~11。截止发稿项目在Gitee上收藏量295人。

搜索系统的意义?

所有有内容的系统,都需要搜索,搜索是最快速最精准定位内容的一种方式。对于一个系统来说,前期数据量较小,搜索可以直接查询数据库,优化下字段,建立上索引,能支撑百万级数据的搜索,问题不大。

随着时光流逝,业务不断发展,数据不断的积累。直接搜索数据库这种方式已经没有客户体验可言,此时就需要改变,就需要把搜索从一个简单的函数提炼成一个模块,一个系统。

市面上有哪些主流开源搜索引擎?

Elasticsearch

Solr

存在即合理,先来对比下两个搜索引擎的优缺点,才能结合自己的实际业务有针对性的选择。

相同点:

两款搜索引擎都是基于Apache Lucene进行开发,所以底层基本一致,只不过为了面向不同的业务,侧重点不同。

优缺点:

Solr

优点:

1、支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式

2、成熟、稳定

3、纯搜索,速度更快

缺点:

1、当索引文件大到一定程度的时候,创建、优化索引效率下降,导致索引创建过程过搜索处理速度下降。

Elasticsearch

优点:

1、分布式,扩展能力较强

2、实时搜索能力更强

3、上手简单,很多默认值

缺点:

1、仅支持JSON格式

总结下上面的对比:如果是几十亿数据,哪个都行。更多数据,面向C端用户的,最好选Elasticsearch,面向B端或者企业内部的,最好选Solr。

此项目,是基于Solr的。

简单介绍下我所经历过的基于Solr搭建的搜索系统。2013年我接受一个搜索项目,项目搭建于2011年,使用Solr1.4.1版本,索引库数据40亿+,整体搜索效率不错,只不过每次优化索所使用的时间,是人为可以感知的到的。所以后来我们就把优化索引这块放到了晚上进行。

此项目现在可以处理哪些问题?

文档内容检索。类型包含:pdf、doc、docx、ppt、pptx、txt、log等。使用场景:比如有很多接口文档,此时有一个接口需要变更字段,但是经年累月,早已不记得这个接口是写在哪个文档里面了,此时使用本系统,输入接口名称,即可检索到对应的文件。(前提:文件没有被删除,并且已经创建了索引。)

数据库内容检索。现在已经和mysql打通完毕,其他数据库可以自行扩展。无需额外单独写代码实现,已经支持增量同步数据库数据。比如:此时在业务系统新建或更新一条数据,无需其他操作,即可在搜索系统中搜索到最新创建或者修改的数据。

中文分词。比如搜索关键字:”无印良品荣耀“,即可检索到”无印良品“和”荣耀“相关的数据

此项目如何部署?

项目只依赖JDK8,无需部署其他服务,如Tomcat,但“search”模块源码编译依赖Maven。

此项目部分截图。

搜索文件

搜索数据库数据

其他及源码获取

源码、技术架构介绍、启动介绍、配置文件介绍等,请获取源码查看"README.md"

获取源码方式:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181212G1B5TE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券