elasticsearch, как запрашивать с двумя разными полями с диапазоном данных

Я использую elasticsearch, у меня есть следующие поля в документе.

sale_start

sale_end

sale_price

цена продажи

Я хочу запросить данные, которые должны быть такими:

если дата начала и окончания продажи находится между текущей датой

тогда он должен соответствовать условию диапазона цен с sale_price

если дата начала и окончания продажи не находится между текущей датой

тогда он должен соответствовать условию диапазона цен с sell_price

Я много искал, но не смог найти способ написать такое условие. Я также новичок в elasticsearch. заранее спасибо


person karan    schedule 11.05.2016    source источник


Ответы (1)


Если бы я правильно понял ваше требование, это можно было бы выразить так:

  • The outer bool/should contains the two main cases:
    1. the current date now is in the interval [sale_start, sale_end] AND the sale_price is between the price bounds. Note that I've arbitrarily chosen the interval [1, 1000], but you can change that freely.
    2. текущая дата now либо до sale_start, либо после sale_end И selling_price находится в диапазоне цен [1, 1000].

Запрос:

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "range": {
                  "sale_start": {
                    "lt": "now"
                  }
                }
              },
              {
                "range": {
                  "sale_end": {
                    "gt": "now"
                  }
                }
              },
              {
                "range": {
                  "sale_price": {
                    "gt": 1,
                    "lt": 1000
                  }
                }
              }
            ]
          }
        },
        {
          "bool": {
            "should": [
              {
                "range": {
                  "sale_start": {
                    "gt": "now"
                  }
                }
              },
              {
                "range": {
                  "sale_end": {
                    "lt": "now"
                  }
                }
              }
            ],
            "must": [
              {
                "range": {
                  "selling_price": {
                    "gt": 1,
                    "lt": 1000
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
person Val    schedule 11.05.2016