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.
Sie Rock Mann !!! – sunshinekitty