Elasti c search: hour_minute_second mapping возвращает пустые данные - PullRequest
1 голос
/ 03 апреля 2020

Ниже сопоставления я создал для поля поиска

PUT /sample/_mapping
{
  "properties": {
    "webDateTime1": {
      "type":   "date",
      "format": "dd-MM-yyyy HH:mm:ss||dd-MM-yyyy||hour_minute_second"
    }
  }
}

Если я ищу по "04-04-2019 20:17:18", получаю правильные данные, если я ищу по "04-04- 2019 "получение правильных данных, если я ищу на основе" 20:17:18 ", не знаю, всегда получаю пустой результат. Любая помощь будет оценена.

1 Ответ

2 голосов
/ 03 апреля 2020

Когда вы принимаете несколько примеров документов:

POST sample/_doc/1
{"webDateTime1":"04-04-2019 20:17:18"}

POST sample/_doc/2
{"webDateTime1":"04-04-2019"}

POST sample/_doc/3
{"webDateTime1":"20:17:18"}

и затем агрегируете в поле даты,

GET sample/_search
{
  "size": 0, 
  "aggs": {
    "dt_values": {
      "terms": {
        "field": "webDateTime1"
      }
    }
  }
}

вы увидите, как значения на самом деле indexed:

...
"buckets" : [
        {
          "key" : 73038000,
          "key_as_string" : "01-01-1970 20:17:18",
          "doc_count" : 1
        },
        {
          "key" : 1554336000000,
          "key_as_string" : "04-04-2019 00:00:00",
          "doc_count" : 1
        },
        {
          "key" : 1554409038000,
          "key_as_string" : "04-04-2019 20:17:18",
          "doc_count" : 1
        }
      ]
...

Вот почему ваш запрос для 20:17:18 вызывает у вас головную боль.

Теперь вы обычно хотите использовать запрос range следующим образом:

GET sample/_search
{
  "query": {
    "range": {
      "webDateTime1": {
        "gte": "20:17:18",
        "lte": "20:17:18",
        "format": "HH:mm:ss"
      }
    }
  }
}

Обратите внимание на параметр format. Но опять же, если вы не предоставите date в своем поле datetime, оказывается, что в качестве даты будет взята эпоха unix.

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