【问题标题】:How to use join in solr in order to get result from both the cores?如何在 solr 中使用 join 以获得两个内核的结果?
【发布时间】:2018-01-21 08:24:34
【问题描述】:

我有两个核心:

核心 1:BookID、地点、标题、作者、PubDate

核心 2:BookID、Text、Referenecs、Size、LastUpdated

http://localhost:8983/solr/core1/select?fl=Title,%20Venue,%20Authors,%20PubDate&q={!join%20from=PaperID%20to=fileName%20fromIndex=core2%20}size:15870

上述查询返回零结果为:

<response>
   <lst name="responseHeader">
      <int name="status">0</int>
      <int name="QTime">0</int>
      <lst name="params">
         <str name="q">{!join from=PaperID to=fileName fromIndex=PapersIndex }size:15870</str>
         <str name="fl">Title, Venue</str>
      </lst>
   </lst>
   <result name="response" numFound="0" start="0" />
</response>

我不知道 solr join 是如何工作的。为什么结果为零?

【问题讨论】:

    标签: join solr solrj solrcloud


    【解决方案1】:

    Solr 中的联接不能从双方返回结果。将连接视为“通过匹配来自不同核心的结果来过滤结果”(即常规 SQL 中的 INNER JOIN)。

    您的示例给出零结果的原因可能是因为您将一个核心的 ID 与另一个核心中的 SIZE 结合起来。您想将 ID 与 ID(即两个核心中的公共 ID)结合起来。

    但您仍然只能从单个核心/集合返回数据。

    解决方案通常是将所有内容索引到同一个核心中,尽管支持使用流表达式连接来自双方的数据(返回每个结果,然后从两个游标连接),但我不推荐从头开始基于您的查询和索引设计。

    【讨论】:

    • @ MatsLindh 感谢您的指导...实际上在上述查询中,我将 ID 与 ID 进行比较。大小是第二核的条件和场。我需要基于第二个核心条件的第一个核心的结果,即返回第一个核心的某些属性,其中大小为 15870。其中大小是第二个核心的字段。
    【解决方案2】:

    解决了...很简单尝试了以下查询:

    http://localhost:8983/solr/core/select?q=*:*&%20fl=%20Title,Year&fq={!join%20from=BookID%20fromIndex=core2%20to=BookID}Year:2000
    

    您可以根据基于第二个核心的某些条件从第一个核心获取字段。

    就像我需要来自 core1 的 field1, field2,..fieldn core2.field="something"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 2010-09-07
      相关资源
      最近更新 更多