我们在SOLR中有几个核心设置,并希望搜索这些核心并返回单个结果集。
更多背景: 我们有一个SOLR核心,我们索引我们的内部博客引擎。我们还有一个SOLR核心,我们为CMS系统编制索引。我们希望搜索这两个核心但查看单个结果集。
我知道文档中有相关实体,但我们希望将内核分开,以便于维护和冗余。
我们使用SolrSharp作为搜索SOLR的包装器。 任何建议或指示都将不胜感激。
答案 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>