近期,业主对POI检索提出了一些想法,针对之前简单的WordSegment分词和模糊匹配搜索需要进行一些更为符合业主需求的调整。于是这几天对搜索引擎进行了一些技术选型;
一、Apache Lucene
Lucene是一个开源的高性能、可扩展的全文检索引擎工具包,但不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。所以它是一套信息检索工具包,可以说是当今最先进、最高效的全功能开源搜索引擎框架。使用起来相对复杂。
参考: Lucene解析 - 基本概念
二、Elasticsearch
Elasticsearch是一个实时的分布式搜索和分析引擎。可以快速处理大规模数据。可以用于全文搜索、结构化搜索和分析。
使用:
分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索;
实时分析的分布式搜索引擎;
可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
案例:
维基百科、英国卫报、StackOverFlow、Github、Goldman Sachs(股票分析)
优点:
1、 分布式,不需要其他组件,实时分发;
2、 完全支持Apache Lucene的接近实时的搜索;
3、 处理多租户不需要特殊配置,而Solr则需要更多的高级设置;(多租户技术)
4、 采用Gateway的概念,使得完备份更加简单;(gateway)
5、 各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工
作。(分布式)
缺点:
没有集成Lucene的新功能
三、Solr
Solr是Apache Lucene项目的开源企业搜索平台。主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本的处理。是高度可扩展的,并提供了分布式搜索和索引复制。是最流行的企业级搜索引擎。是一个独立的全文搜索服务器。
优点:
1、 有一个更大、更成熟的用户、开发和贡献者社区;
2、 不考虑建索引的同时进行搜索,速度更快;
3、 支持添加多种格式的索引。
缺点:
建立索引时,搜索效率下降,实时索引搜索效率不高。
对比
单纯的对已有数据进行搜索时,Solr更快
实时建立索引时,Solr会产生io阻塞,查询性能较差,Elasticsearch具有更明显的优势。
总结
相对来讲,如果考虑静态搜索,Sorl相对更合适;如果考虑实时,涉及到分布式,Elastic相对合适。