2014-07-23 3 views
4

Permettez-moi de préciser que j'ai parcouru tout ce que j'ai pu trouver sur ce sujet, y compris les documents Solr et toutes les questions SO.Définition des entités imbriquées dans Solr Data Import Handler

J'ai une instance Solr que j'ai configurée avec un Data Import Hanlder pour extraire des données de MSSQL en utilisant le pilote JDBC. Les données sont, mais il est pas structuré comme je l'estimation prévue dans la documentation Solr DIH

<document> 
<entity> 
    <entity /> 
</entity> 
</document> 

J'ai essayé tous les attributs comme rootEntity, aplatissent, en utilisant CachedSqlProvider, etc. Avec Multivalued = » True » le résultat finit par

docs [ 
{ 
    recordId: '1234', 
    name: 'whatever' 
    subrows_col1: ['x','y','z'] 
    subrows_col2: ['a','b','c'] 
} 
] 

Quand je suis à la recherche

docs [ 
{ 
    recordId: '1234', 
    name: 'whatever' 
    subrows: [{ 
    col1: 'x', 
    col2: 'a' 
}, 
    { 
    col1: 'y', 
    col2: 'b' 
}, 
{ 
    col1: 'z', 
    col2: 'c' 
}] 
} ] 

J'ai vu les choses de bloc rejoindre, mais je suis confus quant à l'endroit où il va. J'ai ajouté

<add> 
<doc> 
    <field /> 
    <doc> 
    <field /> 
    </doc> 
<doc> 
</add> 

au DIH requestHandler, mais il n'a rien fait. Je l'ai ajouté à la/updateHandler de mise à jour et j'ai eu une erreur. Je n'ai aucune idée de l'endroit où cela est supposé aller. Est-ce que cela fonctionne seulement pendant une requête ou est-ce seulement quand vous envoyez des données à solr via/update?

Où puis-je définir la structure du document? J'ai essayé les champs imbriqués dans le schéma, les entités dans la config DIH et le bloc-joint dans les requestHandlers. rien n'a encore fonctionné.

De toute évidence, il me manque quelque chose.

Répondre

1

DIH ne produit pas de documents imbriqués. Solr les supporte, mais DIH ne peut pas encore les générer.

Les entités imbriquées dans DIH doivent être capables de fusionner des sources et de pouvoir créer des entités basées sur l'itération à partir d'une source différente. Par exemple. si l'entité externe lit un fichier pour les noms de fichiers et que l'entité interne charge le contenu de ces fichiers avec chaque fichier ayant son propre enregistrement.

Vous pouvez déplacer votre code objet imbriqué dans le client avec SolrJ pour le moment.

+0

Est-il possible de transmettre un document formaté à Solr et de le stocker de la même manière? –

+0

Vous pouvez envoyer des documents formatés imbriqués à Solr, mais ils doivent être au format que Solr comprend: http://heliosearch.org/solr-4-8-features/. Vous pouvez également être intéressé par SIREn add-on à Solr: http://siren.solutions/siren/overview/ –

8

L'indexation de document imbriqué dans DIH est finalement prise en charge à partir de Solr 5.1.

https://issues.apache.org/jira/browse/SOLR-5147

ajoutant simplement child=true à l'entité enfant, puis Solr automagiquement index DIH comme document de l'enfant.

Exemple tiré de JIRA (dans le lien ci-dessus):

<document> 
    <entity name='PARENT' query='select * from PARENT'> 
    <field column='id' /> 
    <field column='desc' /> 
    <field column='type_s' /> 
    <entity child='true' name='CHILD' query="select * from CHILD where parent_id='${PARENT.id}'"> 
     <field column='id' /> 
     <field column='desc' /> 
     <field column='type_s' /> 
    </entity> 
</entity> 
</document> 

J'ai aussi décompilé DocBuilder.class dans solr-dataimporthandler-5.3.0.jar, a trouvé cet extrait de code: -

if (doc != null) { 
    if (epw.getEntity().isChild()) 
    { 
     childDoc = new DocWrapper(); 
     handleSpecialCommands(arow, childDoc); 
     addFields(epw.getEntity(), childDoc, arow, vr); 
     doc.addChildDocument(childDoc); 
    } 
    else 
    { 
     handleSpecialCommands(arow, doc); 
     addFields(epw.getEntity(), doc, arow, vr); 
    } 
} 

Remarqué que si epw.getEntity().isChild() retournera vrai si child="true" est défini, créant ainsi un nouveau DocWrapper et ajouter comme document enfant au lieu de simplement ajouter l'entité en tant que bunc h de nouveaux champs.

Questions connexes