2016-10-13 4 views
1

Est-il possible de comparer le champ date à current time puis de faire un tri par le résultat de cette comparaison (quelque chose comme des cas de commutation dans l'ordre SQL par)? Le but est de faire en sorte que les documents ayant un champ datetime spécifique dont la valeur est supérieure à l'heure actuelle, se placent en haut de la liste, mais tous les documents ayant un champ date/heure spécifique sont égaux en priorité. ne pas être trié par ce champ datetime.Elasticsearch: Trier par valeur de date calculée

Répondre

1

Premièrement, vous pouvez utiliser microtime pour une utilisation facile. Et il y a script sort fonctionnalité dans Elasticsearch. Vous pouvez également utiliser if instructions dans ce script.

{ 
    "query" : { 
     .... 
    }, 
    "sort" : { 
     "_script" : { 
      "type" : "number", 
      "script" : { 
       "inline": "if (doc['time'].value > current_time) return doc['field_name'].value; else return current_time", 
       "params" : { 
        "current_time" : 1476354035 
       } 
      }, 
      "order" : "asc" 
     } 
    } 
} 

Vous devez envoyer une heure actuelle lorsque vous exécutez votre requête avec votre script.