2017-09-14 6 views
0

J'ai des données imbriquées dans le SOLR.Comment filtrer un champ spécifique d'un document enfant dans SOLR

{ 
    "name":["Abc"], 
    "age":[30], 
    "hobby":["singing"], 
    "_childDocuments_":[ 
    { 
     "college":["xyz"], 
     "year":[2015], 
     "id":"3752-22491", 
     "3.c.m.c-id":["256939"], 
     "2.c.m-id":["354291"], 
     "path":["3.c.m.ci"]}, 
    { 
     "subject":["history","science"], 
     "marks-1":[75], 
     "marks-2":[75], 
     "id":"3752-802126", 
     "2.c.m-id":["354291"], 
     "path":["2.c.m"]} 
    ]} 

Je ne suis pas seulement d'obtenir marques-1 et marques-2 du solr. Quand je recherche, je trouve des données complètes en guise de réponse. J'ai besoin d'aide pour aller chercher seulement ces deux champs.

Merci pour l'aide à l'avance.

+0

pourrait vous montrer votre requête en cours? – Mysterion

+0

J'utilise cette requête (http: // localhost: 8983/solr/test/select? Indent = sur & highlight = true & start = 0 & rows = 10 & wt = json & hl = true & hl.method = unifié & fl = *, [child parentFilter = chemin: 1.c childFilter = "chemin: *. c. *" limite = 50] & q = nom: Abc ) – Learner

Répondre

0

Vous ne pourriez pas le faire avec ChildDocTransformer, puisque son but de filtrer qui documents enfants à montrer, et non qui champs du document de l'enfant à revenir. De plus, je suis assez sûr qu'il sera plus facile de filtrer ces champs dans le client ou lors de la transformation de la réponse, car vous n'obtiendrez aucune amélioration des performances dans la limitation des champs de document enfant.

Cependant, si vous voulez continuer à le faire via requête Solr, vous devez utiliser subquery transformer avec quelque chose comme ceci:

solr/collection_name/select?fl=id,title_t,stars:[subquery] //enter mode for subquery 
&indent=on 
&q=title_t:* // this is the general query, here, just selecting book 
&stars.fl=stars_i // which fields from the child documents to return 
&stars.q={!prefix f=id v=$row.id} // subquery that you need to adapt 

Je ne cette requête sur la collection des livres/revues de here et de travail ça va. Cependant, vous devrez adapter la sous-requête. Le problème ici est que vous devez sélectionner uniquement des documents enfants spécifiques, qui correspondent au document parent. Il pourrait s'agir d'une sorte de parent_id ou autre chose (je ne vois pas cette information dans vos données, vous en aurez donc besoin).

Pourquoi en avez-vous besoin? Sinon, chacun de vos documents parents contiendra sous TOUS les documents enfants, que vous sélectionnerez avec la sous-requête. Dans mon exemple, j'utilise la requête de préfixe, puisque l'id des documents enfants consiste en l'id du document parent. Par exemple.

id:book1 

et, ids enfants sont:

id:book1_r1