Ошибка означает, что вам нужно будет сделать что-то большее, чтобы синтаксический анализатор запросов ES понял, что это значение date
, а не string/text/keyword
тип:
Кроме того, обычно используются поля даты для определенного диапазона. Ниже описано, как это можно сделать, добавив Range feature
Используя query_string:
POST your_index_name/_search
{
"query": {
"query_string": {
"default_field": "time",
"query": "time:[2019-01-02T14:25:19.728709Z TO 2019-01-02T14:25:19.728709Z]"
}
}
}
Обычно это [min To max]
для поиска документов в указанном временном диапазоне, но если вы хотите найти документы на эту дату, укажите одну и ту же дату для min
и max
.
Использование Range Bool Query:
POST you_index_name/_search
{
"query": {
"bool": {
"must": [
{
"range": {
"mydate": {
"gte": "2019-01-02T14:25:19.728709Z",
"lte": "2019-01-02T14:25:19.728709Z"
}
}
}
]
}
}
}
Выше приведен пример Range Query с использованием запроса DSL
В качестве альтернативы вы также можете использовать простой запрос на совпадение, чтобы получить то, что вы хотите, используя DSL-запрос через Term Query , потому что внутренне он хранится как long
значение.
POST your_index_name/_search
{
"query": {
"term": {
"mydate": "2019-01-02T14:25:19.728709Z"
}
}
}
Примечание: Elasticsearch хранит значения даты в виде long
типа данных в своем инвертированном индексе, как указано в этой ссылке