全文搜索引擎 ElasticSearch 还是 Solr? (2)

索引的维护
一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。进行全文检索需要扫描整个表,如果数据量大的话即使对SQL的语法优化,也收效甚微。建立了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引。

什么时候使用全文搜索引擎:

搜索的数据对象是大量的非结构化的文本数据。

文件记录量达到数十万或数百万个甚至更多。

支持大量基于交互式文本的查询。

需求非常灵活的全文搜索查询。

对高度相关的搜索结果的有特殊需求,但是没有可用的关系数据库可以满足。

对不同记录类型、非文本数据操作或安全事务处理的需求相对较少的情况。

Lucene,Solr, ElasticSearch ?

现在主流的搜索引擎大概就是:Lucene,Solr,ElasticSearch。

全文搜索引擎 ElasticSearch 还是 Solr?

它们的索引建立都是根据倒排索引的方式生成索引,何谓倒排索引?

维基百科
倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。

Lucene

Lucene是一个Java全文搜索引擎,完全用Java编写。Lucene不是一个完整的应用程序,而是一个代码库和API,可以很容易地用于向应用程序添加搜索功能。

Lucene通过简单的API提供强大的功能:

可扩展的高性能索引

在现代硬件上超过150GB /小时

小RAM要求 - 只有1MB堆

增量索引与批量索引一样快

索引大小约为索引文本大小的20-30%

强大,准确,高效的搜索算法

排名搜索 - 首先返回最佳结果

许多强大的查询类型:短语查询,通配符查询,邻近查询,范围查询等

现场搜索(例如标题,作者,内容)

按任何字段排序

使用合并结果进行多索引搜索

允许同时更新和搜索

灵活的分面,突出显示,连接和结果分组

快速,内存效率和错误容忍的建议

可插拔排名模型,包括矢量空间模型和Okapi BM25

可配置存储引擎(编解码器)

跨平台解决方案

作为Apache许可下的开源软件提供 ,允许您在商业和开源程序中使用Lucene

100%-pure Java

可用的其他编程语言中的实现是索引兼容的

Apache软件基金会
在Apache软件基金会提供的开源软件项目的Apache社区的支持。

但是Lucene只是一个框架,要充分利用它的功能,需要使用JAVA,并且在程序中集成Lucene。需要很多的学习了解,才能明白它是如何运行的,熟练运用Lucene确实非常复杂。

Solr:

Apache Solr是一个基于名为Lucene的Java库构建的开源搜索平台。它以用户友好的方式提供Apache Lucene的搜索功能。作为一个行业参与者近十年,它是一个成熟的产品,拥有强大而广泛的用户社区。它提供分布式索引,复制,负载平衡查询以及自动故障转移和恢复。如果它被正确部署然后管理得好,它就能够成为一个高度可靠,可扩展且容错的搜索引擎。很多互联网巨头,如Netflix,eBay,Instagram和亚马逊(CloudSearch)都使用Solr,因为它能够索引和搜索多个站点。

主要功能列表包括:

全文搜索

突出

分面搜索

实时索引

动态群集

数据库集成

NoSQL功能和丰富的文档处理(例如Word和PDF文件)

ElasticSearch:

Elasticsearch是一个开源(Apache 2许可证),是一个基于Apache Lucene库构建的RESTful搜索引擎。

Elasticsearch是在Solr之后几年推出的。它提供了一个分布式,多租户能力的全文搜索引擎,具有HTTP Web界面(REST)和无架构JSON文档。Elasticsearch的官方客户端库提供Java,Groovy,PHP,Ruby,Perl,Python,.NET和Javascript。

分布式搜索引擎包括可以划分为分片的索引,并且每个分片可以具有多个副本。每个Elasticsearch节点都可以有一个或多个分片,其引擎也可以充当协调器,将操作委派给正确的分片。

Elasticsearch可通过近实时搜索进行扩展。其主要功能之一是多​​租户。

主要功能列表包括:

分布式搜索

多租户

分析搜索

分组和聚合

Elasticsearch vs. Solr的选择

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxxjj.html