2017-01-19 1 views
0

Ich versuche eine Suche mit TS zu machen, in der die Ergebnisse nach einem Attribut gruppiert sind (im Beispiel: Kategorie).Denkende Sphinxgruppen/Ergebnissammlungen

Eine Struktur wie folgt aus (muss nicht Arrays):

[[id: 1, name: this, category: foo] [id: 2, name: this, category: foo]], 
[[id:3, name: this, category: bar], [id:4, name: this, category: bar]] 

Ich glaube, ich die durch das Attribut sortiert Ergebnisse erhalten könnte und dann die Ergebnisse gehen über die Struktur zu erzeugen ich durch das Attribut wollen aber was ich versuche zu sehen, wenn es möglich ist, ist, dass TS dies für mich tut, ohne Schienen zu benutzen, um jedes Ergebnis zu durchlaufen.

Ich brauche diese Struktur, um die Ergebniselemente anzuzeigen, die nach dem Attribut kategorisiert sind.

Ich habe mit GROUP_BY versucht, aber es gibt nur ein Element pro Attribut, das ich, dass ich die GROUP_BY entweder nicht verstehen oder ich bin nicht zu tun, um die Abfrage richtig macht denken:

Video.search(Search.build_options.merge({:conditions => {:name => "this"}, group_by: :category})) 

Ich bin Mit den aktuellen Versionen von Sphinx und Thinking Sphinx,

+1

ein Element pro Gruppe, ist irgendwie von der Definition der Gruppierung. Sie erhalten eine pro Gruppe sowie die Anzahl der Elemente in dieser Gruppe. Es ist eine Aggregationsfunktion. Es klingt, als wolltest du vielleicht nicht "Gruppe", sondern nur "Ordnung nach" machen, so dass Reihen der Kategorie "Kommen" nebeneinander stehen? - wenn das nicht erklärt, vielleicht kann ein bisschen mehr auf die tatsächliche Struktur, die Sie suchen ** – barryhunter

Antwort

1

Wie Barry in seinen Kommentaren bemerkte, ist Sphinx 'Ansatz zur Gruppierung, einen Datensatz für jeden gruppierten Attributwert zurückzugeben, anstatt eine Sammlung von Ergebnissen für diesen Wert. So verhält sich Thinking Sphinx auch so.

Wenn Sie Sammlungen von Ergebnissen für jeden Wert wünschen, müssen Sie das selbst konstruieren - Sie können sich definitiv nicht darauf verlassen, dass TS dies für Sie tut.