solr的用分布式搜索(转)

2019-03-27 01:08|来源: 网路

solr的用分布式搜索(转)  

2010-03-11 13:05:56|  分类: solr |字号 订阅

直到solr的 1.3 版本,Solr 才能通过复制轻松进行扩展,以满足更大容量的查询需求。但是,如果没有应用程序帮助完成大部分工作,要提供超出单个机器的承载额度的索引还是很困难的。例 如,通常可以在 Solr 中设置多个服务器,其中每一个服务器都有自己的索引,然后再让应用程序来管理搜索 — 但这需要大量的自定义代码。在 1.3 版本中,Solr 添加了分布式搜索功能。应用程序将文档分布到几个计算机上,Solr(和其他程序)通常称之为片(shard)。 每一个片都包含自己的独立索引,而且 Solr 能够跨片协调索引查询。不幸的是,应用程序仍然需要将要创建索引的文档发送到每一个片,但这可能会添加到将来的 Solr 版本中。同时,可以使用一个简单的散列函数根据文档的唯一 ID 确定将文档发送到什么片。与此同时,我将关注搜索的等式方面。

solr的用分布式搜索(转) - hbluojiahui -
Solr 机器容量

一个机器可以容纳的索引大小取决于机器的配置(RAM、CPU、磁盘等)、查询和索引的量,以及 文档的大小和搜索模式。但是通常一个机器能够容纳的文档数量约在几百万到 1 亿之间。

要 开始使用分布式搜索,用户需要花些时间考虑架构。如果仅需要几个片,而且不考虑复制的话,那么可以在每个机器上放置一个片,并且每一个片都能够创建索引和 提供搜索。但如果索引和查询量很大的话,就必须复制每一个片。设置这种系统的常用的方法就是将每一个片及其复制放到一个载入平衡器的后面。图 2 展示了这个架构:


图 2. 分布式和复制 Solr 架构
示例搜索架构
solr的用分布式搜索(转) - hbluojiahui -
分 布式搜索的问题

Solr 的分布式搜索有几个缺点。第一,master 节点不容错,因此它一旦停止,系统就不能为新的文档创建索引或执行复制了。这并不会阻止搜索,而且对于可以手动或通过脚本和外部监控工具来管理片的较小分 布式设置而言,这并不是个问题。换句话说,您不会使用当前的架构来构建下一个 Google,但一定能够提供一个大索引。第二,并不是所有的 1.3 版本中的 de<SearchComponentde< 都是分布式感知的。搜索、分类、调试和突出显示组件是分布是感知的;而其他的不常用的组件,正在努力实现这个功能。在分布式搜索的 wiki 链接中,可以看到一些小警告和所有细节信息(参见 参 考资料)。

注意,图 2 中输入的请求可以进入任何一个复制的片中,因为它们是功能齐全的 Solr 实例。然后,检索节点会将请求发送到其他片。这些请求仅仅是普通的 Solr 请求。要将请求提交到 Solr 服务器并分发请求,需要将 de<shardsde< 参数添加到请求,比如:

http://localhost:8983/solr/select?
  shards=localhost:8983/solr,localhost:7574/solr&q=ipod+solr

在 这个例子中,我假定在本地主机上运行了两个 Solr 服务器(它不是真正的分布式的;它适合于这里的论述,但不能用于您的设置),主服务器在端口 8983 上,从服务器在端口 7574 上。输入的请求进入端口 8983 上的实例,然后它将请求发送到片式服务器上。应用程序很可能将 de<shardsde< 参数值设置成 solrconfig.xml 文件中的 de<SolrRequestHandlerde< 的默认配置的一部分,这样就不需要在每次查询时都传入所有片式服务器的名称了。

转:http://hi.baidu.com/injava/blog/item/be9d30974443266554fb9632.html


转自:http://www.cnblogs.com/lexus/archive/2011/09/25/2190183

相关问答

更多
  • Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http GSolret操作提出查找请求,并得到XML格式的返回结果
  • 现在的软件开发都讲究个"层"的意思. 分布式开发将一个系统分为三个层次:客户端应用程序,应用程序服务器,后台数据库。客户端提出请求,应用服务器接受请求并处理然后返回数据给客户端,后台数据库当然是提供数据。多半是用于WEB开发.这样的分层开发有很多 好处..我就不多说了...
  • 一、DFS为何物? DFS 即微软分布式文件系统的简称,系统管理员可以利用它来有效的整合网络资源,并把这些资源以单一的层次结构呈现给网络用户。管理员利用它可以把资源发布成一 个树形结构,这样大大简化了为用户进行资源配置和对资源管理的工作量。我们可以在不同的机器上调整和移动文件,这不会影响到用户的访问。 二、为什么要使用DES? 1、DFS使用了现有网络中的Share权限,管理员不必进行新的配置 2、通过一个DFS树形结构用户就可以访问多个网络资源,而不用再把远程驱动器映射到本地共享资源中。 3、DFS可以配 ...
  • 分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无复本、数据存于哪个站点以及事务在哪个站点上执行等。 故名思义,分布式 ...
  • 虽然我在这里遇到了一个老问题,但我迟到了一点。 答案是Solr Cloud在内部处理复制。 Solr Cloud wiki页面详细解释了这一点。 如果你设置了numShards = 2并添加更多的服务器(这样你总共有四个),分片将被复制到新的服务器 - 确保你的分片位于多个节点上。 直接回答你的问题; SolrCloud为你做了复制设置和逻辑,你应该让它做它自己的事情,而不是在混合中引入“手动”设置复制。 SolrCloud的重点在于隐藏复制和共享逻辑,允许您在可用时简单添加更多服务器。 当然,您可以创建逻 ...
  • 在Solr 4.7中添加了一个类MiniSolrCloudCluster,它实际上在本地“部署”(如果你只想要ram或在temp目录上)一个完整的solr集群,包括zookeeper,shards和所有东西,供你的测试使用。 你可以在这里找到jira: https : //issues.apache.org/jira/browse/SOLR-5865 我已经成功地使用它来对solr分布式组件进行测试,以Solr测试为例,如下所示: private static MiniSolrCloudCluste ...
  • 假设您的分片是: “localhost:8983 / solr”和“localhost:7574 / solr” 您可以使用solrj执行分布式搜索,例如: String shards = "localhost:8983/solr,localhost:7574/solr"; StringBuffer request = new StringBuffer(); request.append("&q=" + query); request.append("&shards=" + shards); SolrPar ...
  • 简单的解决方案是配置请求处理程序以使用不变量来运行分布式查询。 即使spark-solr试图在查询时间内改变它,该变量也会强制distrib参数具有true值。 通过在solrconfig.xml中的请求处理程序条目的定义下添加以下几行可以引入不变量: true 虽然引入不变量将会解决问题,但我认为这是一种彻底的解决方案。 这是因为解决方案涉及隐藏一个行为,在该行为中,您将参数值重载。 ...
  • 总之,没有。 Solr Distributed Search的工作方式是传入一个shards参数,该参数列出了运行查询的分片。 您查询的Solr分片然后将相同的查询传递给分片列表中列出的所有solr分片,等待结果然后合并它们。 它无法向每个分片传递不同的查询。 我通过这里的文档阅读: https : //wiki.apache.org/solr/DistributedSearch 您可以编写自定义代码来执行此操作,但这对您的用例来说似乎有些过分。 我只想在所有核心上运行相同的查询。 In short, no ...
  • uniqueKey是必需的。 因为它可能会使SolrCloud中的路由和文档替换失败。 如果在云模式下使用solr,请在架构中启用uniqueKey。 uniqueKey is required. as it will likely make routing in SolrCloud and document replacement in general fail. Enable your uniqueKey in schema, if you are using solr in cloud mode.