Как использовать фильтр в 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 в твоем случае. Будет быстрее ИМО.

Другие вопросы по тегам