2013-09-23 13 views
11

Ich habe einige Dokumente, die ich nach einem Datumsfeld sortieren möchte. Für Dokumente, deren Datum einem bestimmten Datum entspricht, Beispiel heute, und alle Daten danach möchte ich aufsteigend sortieren. Für Daten vor dem angegebenen Datum möchte ich in absteigender Reihenfolge sortieren.Bedingte Sortierung in ElasticSearch

Ist dies in ElasticSearch möglich? Wenn ja, könnten Sie eine Literatur oder einen Ansatz vorschlagen?

Datum ist vom Typ "Datum" und Format "dateOptionalTime".

Dank

Antwort

14

Ja, das ist in ElasticSearch mit einem Skript möglich, entweder zum Sortieren oder zum Bewerten.

Meine Präferenz wäre für ein Scoring-Skript, weil 'scriptbasierter Score' (laut Dokumentation) schneller sein wird.

Mit einem Scriptskript können Sie den Unix-Zeitstempel für das Datumsfeld vom Typ int/long und ein MVEL-Sortier-Skript in der custom_score-Abfrage verwenden. Möglicherweise müssen Sie Ihre Dokumente neu indizieren. Sie müssen auch in der Lage sein, die gesuchte Zeit in einen Unix-Zeitstempel umzuwandeln, um es bei ElasticSearch zu pumpen.

Das Sortier-Skript würde dann den angeforderten Zeitstempel vom Zeitstempel jedes Dokuments abziehen und einen absoluten Wert erstellen. Dann werden die Ergebnisse in aufsteigender Reihenfolge sortiert - die niedrigste "Entfernung" ist die beste.

Also, wenn Sie Dokumente datiert vor etwa einem Jahr der Suche, es ist etwas aussehen würde:

"query": { 
    "custom_score" : { 
     "query" : { 
      .... 
     }, 
     "params" : { 
      "req_date_stamp" : 1348438345, 
     }, 
     "script" : "abs(doc['timestamp'].value - req_date_timestamp)" 
    } 
}, 
"sort": { 
    "_score": { 
     'order': 'asc' 
    } 
} 

(Apologies für Fehler in meinem JSON - Getestet habe ich diese Idee in pyes)

Das könnte dir müssen Sie dies optimieren, um das Rundungsrecht zu erhalten - zum Beispiel erwähnt Ihre Frage übereinstimmende Tage, also möchten Sie vielleicht den Zeitmarkengenerator auf den nächsten Tag runden.

Für "vollständige" Informationen können Sie die Custom Score Query docs auschecken und den Link zu MVEL Scripting folgen.

+2

Sie Rock Mann !!! – sunshinekitty

3

Für diese Art von spezifischen Anwendungsfällen, sollten Sie eine Sortierskript verwenden.

Weitere Informationen finden Sie im Abschnitt "Skriptbasierte Sortierung" auf der Seite Sort documentation.