如何一次计算多个solr核心上的查询结果

时间:2014-01-08 14:19:54

标签: search solr

使用solr的多核功能,我们在一个solr实例中实现了多个核心,每个核心都有一些特定信息,例如一个核心存储了酒店的详细信息以及城市,而另一个存储的事件详细信息发生在城市和第三个核心存储的详细信息关于这个城市的餐馆。还有其他参数,以便我们创建单独的核心。

我的应用程序按关键字搜索,我想将列表显示为:

  • hotel(numFound)
  • 事件(numFound)
  • 餐馆(numFound)

然后用户可以深入了解他感兴趣的事情。

我们如何通过查询所有核心并将结果作为每个核心找到的记录数(numFound)来实现这一目标。

Solr.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<solr sharedLib="lib" persistent="true">
    <cores adminPath="/admin/cores" hostPort="${jetty.port:8983}" hostContext="${hostContext:solr}">
        <core default="true" instanceDir="hotelDetails" name="hotelDetails"/>
        <core default="false" instanceDir="Events" name="Events"/>
        <core default="false" instanceDir="Restaurants" name="Restaurants"/>
    </cores>
</solr>

1 个答案:

答案 0 :(得分:0)

您需要使用Solr的分面搜索机制。 This link将指导您进行分面搜索。

可能有很多方法可以实现您的需求。这是我的解决方案

  1. 首先创建一个名为“ type ”的自定义字段。根据每个核心更新,它是每个文档中的相关值(例如,对于hotelDetails类型:hotel)。
  2. 使用分面进行distributed search。在搜索查询中添加以下命令,您将获得预期的结果。
  3. 对于分布式搜索,添加

      

    /选择?集合= hotelDetails,事件,餐馆

    用于分面

      

    面=真安培; facet.field =类型

    检查以下查询。我希望这两个查询都能正常工作。

      

    的http:// '本地主机':8983 / solr的/ hotelDetails /选择碎片=本地主机:8983 / solr的/ hotelDetails,本地主机:8983 / solr的/活动,本地主机:8983 / solr的/餐厅和安培; Q = some_query

      

    的http:// '本地主机':8983 / solr的/ hotelDetails /选择集合= hotelDetails,事件,餐厅和安培; Q = some_query