Как использовать фильтр в ElasticSearch?
Я пытаюсь реализовать фильтр с помощью ElasticSearch. Я просто хочу реализовать фильтр диапазона. У меня есть следующие данные:
{
"result": [
{
"Id": "144039",
"posted_dt": 1506951883637,
"submit_dt": 1507609800000,
"title": "Request for Information (RFI) # 306-18-0018",
"fname": "RODRI",
"email": "",
"desc": "dummy Text"
}
]
}
Я хочу получить данные за последние 3 или 5 дней, которые я использую:
query = {
"bool": {
"must": [
{
"range" : {
"posted_dt" : {
"gte" : "now-3d/d",
"lt" : "now/d"
}
}
} ]
}
}
Мое сопоставление для posts_dt:
"posted_dt": {
"type": "long"
},
Я тоже попробовал фильтр, но безуспешно.
Пожалуйста помоги.
Спасибо
Randheer
2 ответа
Ваше отображение "posted_dt"
поле неверно. Вы намереваетесь сохранить дату в миллисекундах эпохи, но сохраняете ее как длинный тип. Таким образом, фильтр диапазона дат не будет работать с длинным типом данных. Обновите свой "posted_dt"
отображение поля как:
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"posted_dt": {
"type": "date",
"format": "epoch_millis"
}
}
}
}
}
Ссылка Дата тип в Elasticsearch.
Сначала вы должны поделиться своим отображением. На самом деле убедитесь, что posted_dt
а также submit_dt
определяются как date
в вашем отображении. Здесь вы используете long
что неправильно иметь дело с датами.
Примечание: вы должны использовать filter
вместо must
в твоем случае. Будет быстрее ИМО.