如何在solr中使用join来获取两个内核的结果?

时间:2017-08-13 08:34:28

标签: join solr solrj solrcloud

我有两个核心:

核心1:BookID,Venue,Title,Authors,PubDate

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

  

http://localhost:8983/solr/core1/select?fl=Title,%20Venue,%20Authors,%20PubDate&q= {尺寸加入%20from = PaperID%20to = FILENAME%20fromIndex =核2%20!}: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是如何工作的。为什么它给出零结果?

2 个答案:

答案 0 :(得分:3)

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

您的示例给出零结果的原因可能是因为您正在加入一个核心的 ID 与另一个核心中的 SIZE 。您希望根据ID(即两个核心中的公共ID)加入ID。

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

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

答案 1 :(得分:0)

解决了......非常简单的尝试了以下查询:

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"一样
相关问题