2016-11-04 142 views
0

使用Solr的:5.5.3,Java 7中Solr的:查询Parent和Child文档

我已经获取所有项目:盖子和Size_s:XL,借助方面:COLOR_s和SIZE_s。 此项目是父文件的一部分,大小是子文档的一部分。我曾想过使用BlockJoin,但我无法理解如何同时查询父母和孩子。

希望得到任何帮助和指导。谢谢。

<add> 
  <doc> 
    <field name="id">1</field> 
    <field name="type_s">forSaleItem</field> 
    <field name="item">Shirt</field> 
    <doc> 
      <field name="id">11</field> 
     <field name="type_s">itemAttrDoc</field> 
      <field name="COLOR_s">Red</field> 
      <field name="SIZE_s">XL</field> 
      <field name="PRICE_i">6</field> 
    </doc> 
    <doc> 
     <field name="type_s">itemAttrDoc</field> 
      <field name="id">12</field> 
      <field name="COLOR_s">Red</field> 
      <field name="SIZE_s">XL</field> 
      <field name="PRICE_i">7</field> 
    </doc> 
    <doc> 
     <field name="type_s">itemAttrDoc</field> 
      <field name="id">13</field> 
      <field name="COLOR_s">Blue</field> 
      <field name="SIZE_s">L</field> 
      <field name="PRICE_i">5</field> 
    </doc> 
  </doc> 
  <doc> 
    <field name="id">2</field> 
    <field name="type_s">forSaleItem</field> 
    <field name="item">Cap</field> 
    <doc> 
     <field name="type_s">itemAttrDoc</field> 
      <field name="id">21</field> 
      <field name="COLOR_s">Blue</field> 
      <field name="SIZE_s">XL</field> 
      <field name="PRICE_i">6</field> 
    </doc> 
    <doc> 
     <field name="type_s">itemAttrDoc</field> 
      <field name="id">22</field> 
      <field name="COLOR_s">Blue</field> 
      <field name="SIZE_s">XL</field> 
      <field name="PRICE_i">7</field> 
    </doc> 
    <doc> 
     <field name="type_s">itemAttrDoc</field> 
      <field name="id">23</field> 
      <field name="COLOR_s">Red</field> 
      <field name="SIZE_s">L</field> 
      <field name="PRICE_i">5</field> 
    </doc> 
  </doc> 
    <doc> 
    <field name="id">3</field> 
    <field name="type_s">NotforSaleItem</field> 
    <field name="item">trouser</field> 
    <doc> 
     <field name="type_s">itemAttrDoc</field> 
      <field name="id">21</field> 
      <field name="COLOR_s">Blue</field> 
      <field name="SIZE_s">XL</field> 
      <field name="PRICE_i">6</field> 
    </doc> 
    <doc> 
     <field name="type_s">itemAttrDoc</field> 
      <field name="id">22</field> 
      <field name="COLOR_s">Blue</field> 
      <field name="SIZE_s">XL</field> 
      <field name="PRICE_i">7</field> 
    </doc> 
    <doc> 
     <field name="type_s">itemAttrDoc</field> 
      <field name="id">23</field> 
      <field name="COLOR_s">Red</field> 
      <field name="SIZE_s">L</field> 
      <field name="PRICE_i">5</field> 
    </doc> 
  </doc> 
</add> 

编辑: type_s标识的文档,那么任何的查询也应包含这一领域。

+0

您可能会在[Solr Block Join Parser Documentation]中找到您的问题的答案(https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-BlockJoinQueryParsers) –

回答

0

尝试以下查询:

q={!parent which="Item:Cap"}Size_s:XL&facet.field=SIZE_s&facet.field=COLOR_s&facet=on 

这应该给你,你需要的文件。

我用Solr Block Join Parser Documentationyonik's Solr Nested Objects Tutorial作为参考。

+0

谢谢很多为您的回应。 相信它与否我已经写了确切的查询,你提供了,我指的是相同的链接引用。 现在,我必须按项目查询父文档,也** ** type_s **,道歉不要在我的问题中提及它,这是我现在要解决的问题。 我可能会有更多字段的父**和**子文档需要匹配。 正如我所看到的,我可以重复您提到的查询。尝试它。 http://stackoverflow.com/questions/35003195/solr-block-join-parent-query-with-many-children-constraints –