2016-08-12 1 views
0

Ich habe Probleme mit der elastischen Suche, um die Facetten/Aggregationen zu erzeugen, die ich meinen Benutzern anzeigen möchte.Erlaube dem Benutzer, OR in Aggregationen zu verwenden

TLTR

wan't ich die Facetten Facetten auf dieser Seite verhalten: https://mad.coop.dk/frugt-og-groent#!/frugt-og-baer


eine Suchseite vor, wo wir Autos zu verkaufen sind anzuzeigen. Ein Auto ist wie folgt modelliert:

Auto

{ 
    "brand": "Ford", 
    "color": "Blue" 
} 

INDEXING

4 Autos auf den Index

Hinzufügen
POST /agg_analysis/data/_bulk 
{ "index": {}} 
{ "brand" : "Ford", "color":"Blue" } 
{ "index": {}} 
{ "brand" : "Ford", "color":"Red" } 
{ "index": {}} 
{ "brand" : "Toyota", "color":"Blue" } 
{ "index": {}} 
{ "brand" : "Toyota", "color":"Yellow" } 

ERSTE FACETS

Auf der linken Seite der Seite wir den Benutzern erlauben, die Autos

Die Aggregation ist gerade nach vorne

enter image description here

Erstabfrage

GET /agg_analysis/data/_search 
{ 

    "aggs": { 
    "brand": { 
     "terms": { 
     "field": "brand" 
     } 
    }, 
    "color": { 
     "terms": { 
     "field": "color" 
     } 
    } 
    } 
} 

USE CASE 1 zu filtern : FIND MICH EIN BLAUES AUTO

Der Benutzer kann die Farbe klicken: blau Facette und die Facetten und Autos werden entsprechend aktualisiert

enter image description here

GET /agg_analysis/data/_search 
{ 
    "query": { 
    "term": { 
     "color": { 
     "value": "blue" 
     } 
    } 
    }, 
    "aggs": { 
    "brand": { 
     "terms": { 
     "field": "brand" 
     } 
    }, 
    "color": { 
     "terms": { 
     "field": "color" 
     } 
    } 
    } 
} 

Alles ist in Ordnung und Benutzer ist glücklich

Anwendungsfall 2: ME A BLUE FINDEN ODER ROTES AUTO

Hier beginnen die Probleme. Wenn der Benutzer auf das blaue Kontrollkästchen klickte, verschwand das rote Kontrollkästchen.

Also, was ich will, ist, dass alle Facetten aktualisiert werden - mit Ausnahme der der Benutzer klickt in

USE CASE. 3: ME A BLUE FINDEN ODER ROTES AUTO, und es sollte BE A FORD

Das ist ein bisschen das gleiche Problem.

Antwort

2

Sie müssen lediglich Ihre Suche verfeinern post_filter zu verwenden, anstatt query, das heißt lassen Sie die Aggregationen auf den vollen Satz der Dokumente berechnet werden, und erst dann die erhaltenen Dokumente filtern post_filter verwenden.Mit query werden die Dokumente vorher zu laufenden Aggregationen gefiltert, weshalb Sie nicht alle Facetten mehr sehen.

GET /agg_analysis/data/_search 
{ 
    "post_filter": { 
    "term": { 
     "color": { 
     "value": "blue" 
     } 
    } 
    }, 
    "aggs": { 
    "brand": { 
     "filter": { 
     "term": { 
      "color": { 
      "value": "blue" 
      } 
     } 
     }, 
     "aggs": { 
     "terms": { 
      "field": "brand" 
     } 
     } 
    }, 
    "color": { 
     "terms": { 
     "field": "color" 
     } 
    } 
    } 
} 

Sie sehen auch, dass die brand Aggregation, um nur Marken mit blue Farben gefiltert wird.

Verwandte Themen