A Baldino
A Baldino

Reputation: 188

Solr: Query both Parent and Child docs

Using Solr:5.5.3, Java 7.

I have to fetch all Item:Cap and Size_s:XL, With facets: COLOR_s and SIZE_s. Here Item is part of Parent Doc and Size is part of Child doc. I have thought of using BlockJoin but i am not able to understand how to Query both parent and child at the same time.

Would appreciate any help and guidance. Thanks.

<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>

Edit: type_s identifies the docs, So any query should also contain this field.

Upvotes: 1

Views: 682

Answers (1)

marius_neo
marius_neo

Reputation: 1595

Try the following query:

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

This should give you the documents that you need.

I've used Solr Block Join Parser Documentation and yonik's Solr Nested Objects Tutorial for reference.

Upvotes: 1

Related Questions