2016-06-13 4 views
0

Ich habe einen Index mit einigen Dokumenten mit einem Feld namens "access_type". Es kann 2 Werte haben, entweder "Fakultät" oder "Studenten". Für die Dokumente mit "faculty" als Wert für "access_type" gibt es ein weiteres Feld namens "faculties", das eine Liste des Fakultätsnamens darstellt. So ein Beispiel Dokument würde wie folgt aussehen:Wie implementieren Sie die folgende Bedingung in elasticsearch query?

{ 
    "access_type": "faculty", 
    "faculties": [ 
     "facultyId1", 
     "facultyId2", 
     "facultyId3" 
    ] 
} 

Nun, wenn wir zwei Eingänge sagen eine für die access_type ist und die andere ist für die Fakultäten. Wenn ich die Eingabe "faculty" und "facultyId4" bekomme. Zuerst muss ich alle Dokumente herausfiltern, die dem Zugriffstyp "faculty" entsprechen und in den resultierenden Ergebnissen sollte die "facultyId4" gegen das Feld "faculties" suchen. Da das "facultyId4" nicht im obigen Dokument enthalten ist, sollte es nicht als Treffer betrachtet werden. Wie kann ich dies als ElasticSearch-Abfrage implementieren?

Antwort

0

Hoffe, dies wird für die Arbeit.

GET index/type/_search 
{ 
    "query": { 
     "filtered": { 
      "filter": { 
       "and": { 
        "filters": [ 
        { 
         "query": { 
          "match": { 
           "access_type": "faculty" 
          } 
         } 
        }, 
        { 
         "query": { 
          "match": { 
           "faculties": "facultyId4" 
          } 
         } 
        } 
        ] 
       } 
      } 
     } 
    } 
} 
Verwandte Themen