3 votes

Triage Elasticsearch basé sur plusieurs champs et condition de temps

J'ai une petite application de boutique en ligne et je voudrais trier les articles en fonction de leur prix actif. Il y a donc un prix normal et éventuellement un prix réduit. Mais le prix réduit n'est valable que pour une période donnée et l'index n'est pas mis à jour lorsque la réduction prend fin. Par exemple :

{price: 2.00, discount:{price:1.10, start:2016-08-11, end:2016-09-14}}

Est-il possible d'inclure une telle condition dans le tri ? L'objectif est de garantir un ordre de tri correct à tout moment.

Edit : Pour le moment, la version de l'ES est plutôt ancienne mais la mise à jour vers la dernière n'est pas un problème.

2voto

Andrei Stefan Points 40713

Ceci est pour Elasticsearch 5 et 6 (vous n'avez pas mentionné, comme je l'ai dit, la version et le mapping de cette discount champ). De plus, vous devez explicitement passer comme paramètre la date et l'heure actuelles en millisecondes chaque fois que vous exécutez cette requête :

  "sort": {
    "_script": {
      "type": "number",
      "script": {
        "lang": "painless",
        "source": "if (doc['discount.price']!=null && doc['discount.start'].date.getMillis() < params['time'] && doc['discount.end'].date.getMillis() > params['time']) return doc['discount.price'].value; else return doc['price'].value",
        "params": {
          "time": 1512717897000
        }
      },
      "order": "desc"
    }
  }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X