2017-07-07 4 views
0

Hallo Elasticsearch-Gurus, ich brauche deine Hilfe! Wir verwenden Elasticsearch v5.4 und ich mehrere verschachtelte Typen in Elasticsearch in Form haben:Elasticsearch post_filter auf verschachtelten Typen, die nicht nach Aggregationen filtern

"testLookup" : [ 
    { 
    "id": 1001, 
    "name": "test1" 
    }, 
    { 
    "id": 1002, 
    "name": "test2" 
    } 
] 

, die ich die Namen als Checkbox Optionen in einem Filter anzuzeigen bin versucht.

ich versuchte, das post_filter Top-Level-Element zu verwenden, um im Wesentlichen die Aggregationen zu filtern, so kann ich nur die betroffenen Filteroptionen aktualisieren und anzuzeigen, ein bisschen wie, wie es auf dieser Demo-Seite verwendet wird: http://demo.searchkit.co

"post_filter": { 
    "bool":{ 
     "must": [ 
    {  
     "nested" : { 
     "path" : "testLookup", 
     "query": { 
      "bool": { 
      "filter":{ 
       "bool":{ 
       "should":[ 
         { "term": { "perTestLookup.name.keyword": "Adele"}} 
     ] 
      } 
     } 
     } 
    } 
    } 
    }, 
       {  
    "nested" : { 
     "path" : "testLookup2", 
     "query": { 
     "bool": { 
      "filter":{ 
      "bool":{ 
       "should":[   
       { "term": { "perTestLookup2.name.keyword": "Gene" }} 
     ] 
      } 
     } 
     } 
    } 
    }  
    } 
    ] 
} 
} 

Wenn ich mich nicht irre, denke ich, was post_filter tut, ist den Filter für jede der Aggregationen anwenden, bevor die Suchanfrage gesendet wird, was Sie beobachten können, indem Sie in die Anfrage Payload des Suchfilters nach einem Klick auf eine der Filter Kontrollkästchen.

Allerdings kann ich nicht die post_filter die Filter auf die Aggregationen anwenden, die Filter werden gerade nicht angewendet. Warum ist das der Fall? wird post_filter für verschachtelte Typen nicht unterstützt?

Alle Tipps oder Anleitungen werden sehr geschätzt. Vielen Dank!

Antwort

0

Hinweis: Ich habe keine SUCHKIT-Erfahrung.

Die post_filter in einer Elasticsearch Anfrage wird ausgeführt, nachdem die Aggregationen berechnet wurden, um das Trefferergebnis weiter zu reduzieren. Siehe die Dokumentation über post_filter. Die Idee dahinter ist die Tatsache, dass Sie in einer facettierten Suche (dh stellen Sie sich eine Filterung nach Kategorie vor) immer noch die Kategorieanzahl für alle Kategorien in Ihren Aggregationen abrufen möchten, aber Sie möchten nach dieser angeklickten Kategorie filtern die Dokumente, die Sie suchen.

Dies ist also das erwartete Verhalten aus der Elasticsearch-Perspektive.

Verwandte Themen