2016-06-06 14 views
0

Ich mache eine Suche mit "gefilterten" Abfrage und dann nach SUM von 3 Spalten sortieren.ElasticSearch Sortierung auf mehrere Felder mit Summierung

ZB:

"query": { 
    ... 
}, 
"sort": { 
    view_count + comment_count + like_count 
    order: DESC 
} 

Das Ergebnis sollte Ordnung der Summe der obigen 3 zählt in absteigender sein.

Wie erreichen Sie die SUMME der Spalten und dann ordnen Sie die Ergebnisse.

Jede Hilfe wird geschätzt.

+0

Eine "Brute-Force" -Methode wäre, ein sum_count-Feld zu einem Dokument hinzuzufügen und jedes Mal zu aktualisieren, wenn Sie eine der drei Komponenten aktualisieren –

Antwort

1

Verwenden Sie script sorting, wenn Sie die Daten nicht ändern können/haben keine Kontrolle über die Zuordnung/die drei Felder ändern sich (dh sie sind nicht einfügen und vergessen).

{ 
    "sort": { 
    "_script": { 
     "type": "number", 
     "script": "return doc['view_count'].value + doc['comment_count'].value + doc['like_count'].value, 
     "lang": "groovy", 
     "order": "desc" 
    } 
    } 
} 

Wenn Sie die Dokumente häufig aktualisieren, können Sie auch ein anderes Feld hinzufügen - lass es sum nennen - wo Sie bereits Index die Summe der drei Felder. Und dann sortieren Sie einfach auf das Feld sum.

+0

Es arbeitete mit "groovy", aber wie es standardmäßig deaktiviert ist, musste es zuerst aktiviert . Vielen Dank. –

Verwandte Themen