2016-06-23 5 views
0

Ich versuche, eine Schiene App wie die here auf elasticsearch Aggregationen zu erstellen. Ich habe es aktualisiert, um mit dem aktuellen Elasticsearch 2.3 zu arbeiten. Das Javascript funktioniert gut, aber der Filter gibt nichts zurück, wenn ich mehr als ein Kontrollkästchen auswähle. Der Code unterscheidet sich von der App here, die keine Checkboxen behandelt. Was vermisse ich?elasticsearch facettierte Navigation

Filter sieht wie folgt aus:

__set_filters = lambda do |key, f| 
    @search_definition[:post_filter][:and] ||= [] 
    @search_definition[:post_filter][:and] |= [f] 

    @search_definition[:aggregations][key.to_sym][:filter][:bool][:must] ||= [] 
    @search_definition[:aggregations][key.to_sym][:filter][:bool][:must] |= [f] 
    end 

if options[:category] 
    f = { term: { "categories,name" => options[:category] } } 
    __set_filters.(:location, f) 
end 

if options[:location] 
    f = { term: { "location,name" => options[:location] } } 
    __set_filters.(:categories, f) 
end 
+0

Geben Sie ein Beispiel für einen Kategorienamen an. Sind ihre Räume? Haben Sie den Standard-Analysator verwendet? – bkunzi01

Antwort

1

Filter verwenden können Kopfschmerzen verursachen, wenn neue Elastic Suche, weil es eine genaue Übereinstimmung Ihrer Eingabe für ein bestimmtes Feld jedoch suchen, wenn es zuerst Indizes Dinge (vor allem Strings Wenn Sie den Standardanalysator nicht verwenden, wird das Feld in mehrere Strings aufgeteilt, auf die sich die Dokumente als Token beziehen. Wenn Sie beispielsweise eine Stadt mit dem Namen "Oyster Bay" indizieren, ohne einen Analysator anzugeben, wird das Feld tatsächlich in zwei Token "Oyster" und "Bay" aufgeteilt. Wenn Sie dann versuchen, einen Filter für dieses Feld zu verwenden und "Oyster Bay" einzufügen, wird es nicht als exakte Übereinstimmung angezeigt und zurückgegeben. Ich würde empfehlen, wenn Sie vorhaben, Filter über Abfragen zu verwenden, um die "not_analyzed" Indizierung zu den entsprechenden Feldern in Ihrem Mapping hinzuzufügen, um dieses Problem zu vermeiden.

+1

Sehr hilfreich Danke –