Java全文搜索引擎框架介绍及参考文章-乐题库
优采云 发布时间: 2021-06-02 19:12Java全文搜索引擎框架介绍及参考文章-乐题库
一、搜索引擎基本介绍
二、常用搜索引擎框架介绍与对比
三、 参考文章
一、搜索引擎基本介绍1.什么是搜索引擎
搜索引擎通常是指一种全文搜索引擎,它采集万维网上数千万到数十亿的网页,并将网页中的每个词(即关键词)编入索引,建立索引数据库。当用户搜索某个关键词时,页面内容中收录关键词的所有网页都会被搜索出来作为搜索结果。这些结果经过复杂的算法排序(或包括商业竞价排名、商业推广或广告)后,将根据与搜索关键词的相关程度(或与相关无关)进行排序。
2.传统搜索与搜索引擎对比
2.1 传统方法
(1)在文档中使用系统的Find搜索
(在2)mysql 中使用类似模糊查询
有问题:
(1)海量数据无法及时响应,少量数据可通过传统MySql索引解决
(2)一些没用的词不能过滤不能分词
(3)数据量大的话很难扩展
(4)相同的数据很难排序最相似
2.2 搜索引擎实践
(1)store 非结构化数据
(2)快速检索和响应我们需要的信息,快速准确
(3) 用于相关性排序、过滤等
(4)可以去除停用词(没有特殊含义的词,如英文a、is等,中文:this、yes等),框架一般支持自定义停用词
二、常用搜索引擎框架介绍与比较1.Java全文搜索引擎框架Lucene
1.1 简介
Lucene 的开发语言是 Java,它也是 Java 家族中最著名的开源搜索引擎。它已经是Java世界的标准全文搜索程序。它提供了完整的查询引擎和索引引擎,没有中文分词引擎。需要自己实现,所以用Lucene搭建搜索引擎需要自己的架构,不支持实时搜索。但是solr和elasticsearch都是基于Lucene封装的。
1.2 优点
成熟的解决方案,有很多成功案例。顶级apache项目正在持续快速推进。一个庞大而活跃的开发社区,大量的开发人员。它只是一个类库,有足够的定制和优化空间:简单定制后,可以满足大多数常见的需求;优化后可支持10亿+订单搜索。
1.3 缺点
需要额外的开发工作。所有的扩展、分发、可靠性等都需要自己来实现;非实时,从索引到搜索有时间延迟,目前的“近实时”(Lucene Near Real Time search)搜索方案是可扩展的,需要进一步改进。
2.Apache Solr
2.1 简介
Solr 是一个基于 Lucene 的高性能全文搜索服务器,用 Java 开发。使用 XML 通过 Http 将文档添加到搜索集合中。查询集合也是通过 http 接收 XML/JSON 响应来实现的。其主要特点包括:高效灵活的缓存功能、垂直搜索功能、突出搜索结果、索引复制以提高可用性、提供一套强大的Data Schema来定义文本分析的字段、类型和设置,并提供基于Web的管理界面等
2.2 优点
(1)Solr 拥有更大、更成熟的用户、开发者和贡献者社区。
(2)支持添加多种格式的索引,如HTML、PDF、Microsoft Office系列软件格式,以及JSON、XML、CSV等纯文本格式。
(3)Solr 比较成熟稳定。
(4)在搜索的同时不考虑建索引,这样比较快。
2.3 缺点
索引时,搜索效率降低,实时索引搜索效率不高
3. 弹性搜索
3.1 简介
ElasticSearch 是一个基于 Lucene 的开源、分布式、RESTful 搜索引擎。专为在云计算中使用而设计,可实现实时搜索,稳定可靠,速度快,安装使用方便。支持通过 HTTP 使用 JSON 进行数据索引。
3.2 优点
(1)Elasticsearch 是分布式的,不需要其他组件,而且是实时的,称为“推送复制”。
(2)Elasticsearch 完全支持 Apache Lucene 的近实时搜索。
(3)处理多租户(multitenancy)不需要特殊配置,而Solr需要更高级的设置。
(4)Elasticsearch 使用网关的概念,让备份更容易完成。
每个节点形成一个点对点的网络结构,当一些节点出现故障时,会自动分配其他节点来替换它们。
3.3 缺点
不够自动化(不适合当前新的 Index Warmup API)
4. Elasticsearch 和 Solr 对比总结
(1)两者都很容易安装
(2)Solr 使用 Zookeeper 进行分布式管理,Elasticsearch 本身具有分布式协调管理功能;
(3)Solr 支持更多格式的数据,而 Elasticsearch 只支持 json 文件格式;
(4)Solr官方提供了更*敏*感*词*,而Elasticsearch本身更注重核心功能,大部分高级功能由第三方插件提供;
(5)Solr 在传统搜索应用中表现优于 Elasticsearch,但在处理实时搜索应用时,其效率明显低于 Elasticsearch。
(6)总之,Solr 是传统搜索应用的强大解决方案,而 Elasticsearch 更适合新兴的实时搜索应用。
5.狮身人面像
5.1 简介
Sphinx 是一个基于 SQL 的全文搜索引擎,专为一些脚本语言(PHP、Python、Perl、Ruby)搜索 API 接口设计。
Sphinx 是一个用 C++ 编写的开源搜索引擎,也是比较主流的搜索引擎之一。在索引事件方面比Lucene快50%,但是索引文件比Lucene大一倍,所以Sphinx是为事件建立索引的一种策略。在搜索速度上,它和Lucene没有太大区别,但是Lucene在搜索准确度上要优于Sphinx。另外,Lucene在添加中文分词引擎的难度方面比Sphinx要好。其中Sphinx支持实时搜索,使用起来比较简单方便。
Sphinx 可以轻松地与 SQL 数据库和脚本语言集成。当前系统内置了对 MySQL 和 PostgreSQL 数据库数据源的支持,还支持从标准输入中读取特定格式的 XML 数据。通过修改源代码,用户可以自行添加新的数据源(例如:原生支持其他类型的DBMS)
5.2 功能
(1) 高速索引(在当代 CPU 上,峰值性能可以达到 10 MB/秒);
(2)高性能搜索(在2-4GB文本数据上,每次检索平均响应时间小于0.1秒);
(3)可以处理海量数据(目前已知可以处理100GB以上的文本数据,单CPU系统可以处理1亿文档);
(4)提供了一个优秀的相关算法,基于词组相似度和统计(BM25)的复合排名方法;
(5)支持分布式搜索;
(6)支持词组搜索
(7)提供文档摘要生成
(8)可以作为MySQL存储引擎提供搜索服务;
(9)支持布尔、词组、词相似等多种检索模式;
(10)document 支持多个全文搜索字段(最多32个);
(11)文档支持多个附加属性信息(例如:分组信息、时间戳等);
(12)支持分词;
6.卡塔
6.1 简介
基于Lucene,支持分布式、可扩展、容错、准实时的搜索方案。
6.2 优点
开箱即用,它可以与 Hadoop 一起分发。具有扩展和容错机制。
6.3 缺点
只是一个搜索方案,索引构建部分还是需要自己实现。在搜索功能中,只满足最基本的要求。成功案例较少,项目成熟度略低。由于需要支持分发,对于一些复杂的查询需求,定制起来会比较困难。
三、 参考文章