elasticsearch : Как я могу сообщить _reindex api, чтобы он продолжал индексировать документы, в то время как исходный индекс все еще получает новые документы?

#elasticsearch #elastic-stack #elasticsearch-5 #elasticsearch-plugin #elasticsearch-dsl

Вопрос:

У меня ежедневно создаются индексы, эти индексы заполняются агентом, который собирает журналы каждую секунду дня, и я переиндексирую их (по полю) в новые индексы с помощью _reindex api.

Как я могу сказать _reindex api, чтобы он все еще переиндексировал, пока исходный индекс все еще получает новые документы ?

Любая помощь будет действительно оценена!

Спасибо

Ответ №1:

вы не можете принудительно подключить API переиндексации к сети для переиндексации новых полученных документов.

но у меня есть решение. вы можете добавить поле даты (index_time) в исходный индекс. напишите ежечасное задание хрона для запуска API переиндексации с запросом для получения индексированных документов за последний час через index_time.

 POST _reindex
{
  "source": {
    "index": "my-index-000001",
     "query": {
        "filter" :{
            "query": {
                "range": {
                   "index_time": {"gte" : "now-1h"}
                          }
                      }
                   } 
               }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}
 

Комментарии:

1. Привет, Хамид, спасибо за ответ, на самом деле я не знаю, как вызвать _reindex api с заданием cron, есть идеи, пожалуйста ?

2. вы используете ОС на базе Linux?

3. На самом деле я использовал объект cronjob из k8s.

4. Позвольте мне вернуться к вашему ответу, на самом деле у меня нет доступа к fluentd, поэтому я не могу редактировать исходный индекс ( для добавления упомянутого поля), есть ли другой способ, которым я могу переиндексировать в режиме реального времени?

5. есть ли какое-либо поле с отметкой времени? logstash по умолчанию помещает index_time в поле метки времени. поделитесь документом.