搜索多个SOLR核心并返回一个结果集

时间:2010-01-26 11:29:39

标签: solr

我们在SOLR中有几个核心设置,并希望搜索这些核心并返回单个结果集。

更多背景: 我们有一个SOLR核心,我们索引我们的内部博客引擎。我们还有一个SOLR核心,我们为CMS系统编制索引。我们希望搜索这两个核心但查看单个结果集。

我知道文档中有相关实体,但我们希望将内核分开,以便于维护和冗余。

我们使用SolrSharp作为搜索SOLR的包装器。 任何建议或指示都将不胜感激。

4 个答案:

答案 0 :(得分:21)

自Solr 1.3以来,Solr中出现了不错的多核搜索功能。请阅读Distributed Search文章,其中介绍了如何使用shards参数跨多个核查询并将结果作为一个数据集返回。

答案 1 :(得分:19)

无法跨多个核心执行单个查询。另一个答案中提到的分布式搜索与分片有关,分片是跨系统分割索引的。

实际上,多个内核实际上用于在每个内核中存储单独的和不同的结构,并且查询多个内核应该没有意义。正如一些人在之前的评论中提到的那样,你可以拥有一个包含所有字段的附加核心 - 尽管你可能需要重命名这个新核心中的字段,以便可以存储类似命名但不同类型的字段。

答案 2 :(得分:3)

马修的回答是完全正确的。碎片和多核是苹果和橘子。您无法跨多个核心进行统一的单一查询。您必须为每个核心执行单独查询(http:// localhost:8983 / solr / core0 / select?q = ,http:// localhost:8983 / solr / core1 / select?q = 的)。但是,使用分片(http:// localhost:8983 / solr / select?shards = localhost:8983 / solr,localhost:8984 / solr& q = )。

答案 3 :(得分:1)

分布式搜索是正确的答案。 我建议直接在处理程序中配置分布式搜索。 您可以在处理程序中配置localhost,但您可以在外部调用solr。 现在,您可以调用搜索处理程序,该处理程序将自动搜索所有已配置的核心:

http://solrhost:8983/solr/core1?q=

<requestHandler name="/multicore" class="solr.SearchHandler">
  ...
  <lst name="invariants">
    <str name="shards">localhost:8983/solr/core1,localhost:8983/solr/core2</str>
  </lst>
</requestHandler>