2017-09-19 5 views
0

J'ai un document qui contient également la liste des documents de l'enfant dans comme ceci: -Filtre Apache Solr sur les documents d'enfants

{ 

    "pf1":"data1", 
    "pf2":"data2", 
    "path":"1.parent", 
    "_childDocuments":[ 
     { 
      "cf1":"data101", 
      "cf2":"data102", 
      "path":"2.child" 
     }, 
     { 
      "cf1":"data111", 
      "cf2":"data112", 
      "path":"2.child" 
     } 
    ] 

} 

Je veux interroger sur le document de l'enfant où cf1 a une valeur data101. cela signifie que ma sortie sera quelque chose comme ça.

{ 

    "pf1":"data1", 
    "pf2":"data2", 
    "path":"1.parent", 
    "_childDocuments":[ 
     { 
      "cf1":"data101", 
      "cf2":"data102", 
      "path":"2.child" 
     } 
    ] 

} 

Je ne suis pas en mesure de générer la requête pour cela. Y a-t-il un moyen de faire une requête sur un document enfant et d'obtenir également les enfants qui contiennent mon résultat?

Merci à l'avance

Répondre

0

Oui, vous pouvez le faire avec l'aide de ChildDocTransformer

Vous devriez avoir requête normale sur les documents de parents, comme vous le faites maintenant, par exemple:

q=pf1:data1 

et appliquer un transformateur dans le paramètre liste des champs:

fl=pf1,pf2,path,[child parentFilter=type:parent childFilter=cf1:data101] 

Vous devez choisir parentFilter avec soin, car la requête que vous utiliserez ici ne devrait correspondre qu'aux documents parents. Donc, dans mon exemple type:parent est juste un espace réservé pour vous, et vous devriez arriver à la requête, selon vos données (peut-être vous devriez même ajouter un certain type de champ pour faciliter la distinction)