Диапазон дат между 2 различными полями в ElasticSearch - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу получить документ между двумя датами в соответствии с начальной и конечной датой.

Это отображение:

PUT data 
{
  "mappings": {
    "_doc": { 
      "properties": { 
        "product_code": {"type": "keyword"},
        "color_code": {"type": "keyword"},
        "warehouse_id": {"type": "short"},
        "stock": {"type": "float"},
        "inventory_start_date": {
          "type":   "date",
          "format": "yyyy-MM-dd"
        },
        "inventory_end_date": {
          "type":   "date",
          "format": "yyyy-MM-dd"
        }
       }
    }
  }
}

Это список моих данных:

POST _bulk
{ "index" : { "_index" : "data", "_type" : "_doc" } }
{ "product_code" : "20001", "color_code" : "001", "warehouse_id" : 5, "stock" : 10,"inventory_start_date" : "2019-01-01","inventory_end_date" : "2019-01-04"}
{ "index" : { "_index" : "data", "_type" : "_doc" } }
{ "product_code" : "20001", "color_code" : "001", "warehouse_id" : 5, "stock" : 4, "inventory_start_date" : "2019-01-04","inventory_end_date" : "2019-01-07"}
{ "index" : { "_index" : "data", "_type" : "_doc" } }
{ "product_code" : "20001", "color_code" : "001", "warehouse_id" : 5, "stock" : 0, "inventory_start_date" : "2019-01-07","inventory_end_date" : "2019-01-07"}

inventory_start_date и inventory_end_date хранит сумму запаса между 2 датами.

Вот вопрос: как я могу получить данные между двумя диапазонами дат.Например;получение документов между 2019-01-05 и 2019-01-06.Или получение документов между 2019-01-01 и 2019-01-03.

1 Ответ

0 голосов
/ 07 февраля 2019

Учитывая документы, которые вы упомянули, если мне нужен список документов с инвентарем, например, между 2019-01-01 и 2019-01-04, то я бы расширил свой запрос , как показано ниже , и реализовал егоиспользование запросов диапазона к двум различным полям, заключенным в условие bool must .

  • inventory_start_date - между 2019-01-01 и 2019-01-04
  • inventory_end_date - между 2019-01-01 и 2019-01-04

Запрос

POST myindex/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "inventory_start_date": {
              "gte": "2019-01-01",
              "lte": "2019-01-04"
            }
          }
        },
        {
          "range": {
            "inventory_end_date": {
              "gte": "2019-01-01",
              "lte": "2019-01-04"
            }
          }
        }
      ]
    }
  }
}

Ответ

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 2.0,
    "hits" : [
      {
        "_index" : "myindex",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 2.0,
        "_source" : {
          "product_code" : "20001",
          "color_code" : "001",
          "warehouse_id" : 5,
          "stock" : 10,
          "inventory_start_date" : "2019-01-01",
          "inventory_end_date" : "2019-01-04"
        }
      }
    ]
  }
}

Аналогично, для любых других диапазонов дат вам нужно будет соответственно построить свой запрос.

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...