目的:基于项目需求进行技术调研支持全局资源搜索,保证搜索结果的实时性、准确性、多样性。
搜索功能大致流程:

1.创建索引
2.增量同步数据
3.分词器处理
4.语义分析、自定义语义
5.query查询处理
6.相关性排序
技术选型:
目前常用的搜索引擎有Solr和Elasticsearch
Elasticsearch是一个实时的分布式搜索和分析引擎,可以处理大规模数据,可以用于全文搜索、结构化搜索及分析,Elasticsearch使用Lucene作为内部引擎,基于统一开发API进行操作,支持多语言、多客户端接入。
Elasticsearch作为分布式实时文件存储,并将每一个字段都编入索引,使其可以用于搜索。
Elasticsearch优点
1.Elasticsearch是分布式的,不需要其他组件,方便扩展
2.Elasticsearch建立实时搜索时查询速度快
3.默认配置化完善,搭建方便,开发学习成本低
4.基于RESTful API进行数据操作,方便接入
Elasticsearch缺点
1.支持数据类型较少,json格式为常用数据类型
2.高级搜索功能较少需要开发者集成,核心功能就是存储及搜索
Solr是一款经典的搜索引擎,在Elasticsearch没有面世之前Solr是必选项,其主要功能包括全文搜索、命中标示、数据库集成、富文本处理等,Solr采用java编写运行于Servlet容器中,定制开发复杂配置较多。
Solr优点
1.Solr比较成熟,具有成熟的贡献者社区
2.支持添加多种数据格式及索引
Solr缺点
1.开发配置复杂,上手成本比较高
2.在大数据量下搜索性能下降
3.建立实时索引时,实时索引效率不高
Solr于Elasticsearch应用场景对比
Elasticsearch使用场景
对于日志数据分析,ES进行复杂的数据分析
对于主要用于近实时的全文搜索和数据分析
Solr使用场景
对于存储在文件中的日志 可以导入到solr中做分析,
对于关系型数据库里需要做全文搜索的字段 可以导入到slor 中。
总结
项目中的搜索功能建议使用Elasticsearch
1.考虑后续数据量的可扩展性及查询性能
2.Elasticsearch支持单机也支持分布式,内置分布式组件,solr需通过Aache Zookeeper实现分布式
3.除搜索之外,Elasticsearch还支持实时的过滤、分析、统计功能,可以为后续业务做扩展
4.在创建索引的同时进行搜索,Elasticsearch比solr更优
5.随着数据量增加Elasticsearch无明显的性能损失