Giving child="true" Solr 5.5 creates a documents block with implicit
relations across parent and nested children. These later retrievable via
https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-BlockJoinQueryParsers
only. Giving the fact you run 4.10 I don't think you really need
child="true"

On Thu, Apr 14, 2016 at 4:38 PM, Jeff Chastain <[email protected]> wrote:

> I am working on a project where the specification requires a parent -
> child relationship within the Solr data collection ... i.e. a user and the
> collection of languages they speak (each of which is made up of multiple
> data fields).  My production system is a 4.10 Solr implementation but I
> have a 5.5 implementation as my disposal as well.  Thus far, I am not
> getting this to work on either one and I have yet to find a complete
> documentation source on how to implement this.
>
> The goal is to get a resulting document from Solr that looks like this:
>
>                {
>                "id": 123,
>                "firstName": "John",
>                "lastName": "Doe",
>                "languagesSpoken": [
>                               {
>                                              "id": 243,
>                                              "abbreviation": "en",
>                                              "name": "English"
>                               },
>                               {
>                                              "id": 442,
>                                              "abbreviation": "fr",
>                                              "name": "French"
>                               }
>                ]
> }
>
> In my schema.xml, I have flatted out all of the fields as follows:
>
>                <field name="id" type="int" indexed="true" stored="true"
> required="true" multiValued="false" />
>                <field name="firstName" type="text_general" indexed="true"
> stored="true" />
>                <field name="lastName" type="text_general" indexed="true"
> stored="true" />
>                <field name="languagesSpoken" type="string" indexed="true"
> stored="true" multiValued="true"/>
>                <field name="languagesSpoken_id" type="int" indexed="true"
> stored="true" />
>                <field name="languagesSpoken_abbreviation "
> type="text_general" indexed="true" stored="true" />
>                <field name="languagesSpoken_name" type="text_general"
> indexed="true" stored="true" />
>
> The latest rendition of my db-data-config.xml looks like this:
>
> <dataConfig>
>                <dataSource
> driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:...." />
>                <document name="clients">
>                               <entity name="client" query="SELECT * FROM
> clients"
>
> deltaImportQuery="SELECT * FROM clients WHERE id = ${dih.delta.id}"
>
> deltaQuery="SELECT id FROM clients WHERE updateDate >
> '${dih.last_index_time}'">
>
>                                              <field column="id" name="id"
> />
>                                              <field column="firstName"
> name="firstName" />
>                                              <field column="lastName"
> name="lastName" />
>
>                                              <entity
> name="languagesSpoken" child="true" query="SELECT id, abbreviation, name
> FROM languages WHERE clientId = ${client.id}">
>                                                             <field
> name="languagesSpoken_id" column="id" />
>                                                             <field name="
> languagesSpoken_abbreviation" column="abbreviation" />
>                                                             <field
> name="languagesSpoken_name" column="name" />
>                                              </entity>
>                               </entity>
>                </document>
>                ...
>
> On the 4.10 server, when the data comes out of Solr, I get one flat
> document record with the fields for one language inline with the firstName
> and lastname like this:
>
>                {
>                "id": 123,
>                "firstName": "John",
>                "lastName": "Doe",
>                "languagesSpoken_id": 243,
>                "languagesSpoken_abbreviation ": "en",
>                "languagesSpoken_name": "English"
> }
>
> On the 5.5 server, when the data comes out, I get separate documents for
> the root client document and the child language documents with no
> relationship between them like this:
>
>                {
>                "id": 123,
>                "firstName": "John",
>                "lastName": "Doe"
> },
> {
>                "languagesSpoken_id": 243,
>                "languagesSpoken_abbreviation": "en",
>                "languagesSpoken_name": "English"
> },
> {
>                "languagesSpoken_id": 442,
>                "languagesSpoken_abbreviation": "fr",
>                "languagesSpoken_name": "French"
> }
>
> I have spent several days now trying to figure out what is going on here
> to no avail.  Can anybody provide me with a pointer as to what I am missing
> here?
>
> Thanks,
> -- Jeff
>
>


-- 
Sincerely yours
Mikhail Khludnev
Principal Engineer,
Grid Dynamics

<http://www.griddynamics.com>
<[email protected]>

Reply via email to