我知道Elasticsearch是基于Lucene但是我想知道Elasticsearch是否给了我开发搜索引擎的任何好处,而不是直接用Lucene.Net编码。对不起,如果问题有点简单,但我在搜索创建搜索引擎的可能性后感到困惑。
我找到了更多简单lucene.net搜索的例子,但Elasticsearch和Nest没有多少例子。另一个问题是Nest和Elasticsearch之间的区别是什么?他们一样吗?
如果有人在这里给我一些启示,也许有一个很好的样本,我很感激。我需要的是什么?简单,快速,快速的搜索引擎。什么是最好的选择?任何其他替代方案也可以只有.net(c#或vb)谢谢。
答案 0 :(得分:14)
Lucene和.NET端口Lucene.Net是一个搜索引擎库,用于支持应用程序中的全文搜索;它根据您提供的文档(以及文档中的字段)构建倒排索引,以支持全文搜索。 An example of this is search within the Nuget Gallery source,其中nuget包及其属性转换为要传递给Lucene的文档。反向索引存储在目录中的文件中。
Elasticsearch是一个分布式搜索引擎,它使用Lucene - An Elasticsearch cluster can be made up of one or more nodes, where each node can contain a number of shards and replicas; 每个分片都是完整的Lucene索引 。拥有此类基础架构可实现快速性能,并允许水平扩展以处理大量数据中的搜索,因为您不再受单个计算机上单个Lucene索引的限制。此外,您可以通过容错和灾难恢复实现高可用性,因为可以跨分片复制数据,这意味着没有单点故障。 An example of Elasticsearch with NEST is up on my blog.
嗯,这取决于你的用例(它几乎总是这样,对吧?);如果您的应用程序是安装到计算机上并且所有数据都在本地持久存储的应用程序,则可能决定在应用程序中使用Lucene库并将索引目录保存到本地磁盘。同样,如果您有一个简单的Web应用程序在单个服务器上运行,并且小用户数,那么使用Lucene也可能是一个明智的选择。另一方面,如果您的应用程序在Web场中的多台计算机上运行并且需要搜索功能,那么使用像Elasticsearch这样的分布式搜索引擎将是一个好主意。
Elasticsearch的扩展程度如何?早在2013年,Github was using Elasticsearch to index 2 billion documents即网站上每个存储库中的所有代码文件 - 跨44个独立的Amazon EC2实例,每个实例具有2 TB的短暂SSD存储,总共提供 30 TB的主数据< / strong>即可。 Stackoverflow还使用Elasticsearch来强力搜索此站点上的(也许开发人员可以使用某些数字/指标进行评论?)
答案 1 :(得分:2)
Lucene和Elasticsearch是两个完全不同的应用程序类。
Lucene是一个实现倒排索引的库,并使用基本的Lucene查询语言对其进行搜索和排名。它不是一个可以运行和使用的独立应用程序(索引文档,搜索它们,检索它们,......)。
Elasticsearch是一个构建在Lucene之上的分布式服务器。 Elasticsearch为您提供了一个很好的REST API,您可以使用它来索引,搜索和检索文档。它还实现了一种查询语言,其功能远远超出Lucene自身的功能。它也是一个分布式服务器 - 这意味着您可以在许多机器上将Elasticsearch服务器作为一个集群启动,它将自动负责在它们之间分发和复制数据。
同样,Solr也是一个建立在Lucene之上的搜索引擎。
所以这真的取决于你想要达到的目的。如果它只是实现嵌入在现有应用程序中的全文搜索功能,那么Lucene可能就是您所需要的。另一方面,如果您想实施让我们为您的网站说一部关于电影的电影搜索引擎,那么使用Elasticsearch或Solr会更好。