2015-10-01 3 views
1

Есть ли способ удалить документы из ElasticSearch с помощью Logstash и csv-файла? Я прочитал документацию Logstash и ничего не нашел и попробовал несколько конфиги, но ничего не произошло с помощью действия «Удалить»elasticsearch удалить документы, используя logstash и csv

output { 
    elasticsearch{ 
     action => "delete" 
     host => "localhost" 
     index => "index_name" 
     document_id => "%{id}" 
    } 
} 

Кто-нибудь пробовал это? Есть ли что-то особенное, что я должен добавить к разделам ввода и фильтрации конфигурации? Я использовал файловый плагин для ввода и плагин csv для фильтра.

+0

Почему вы хотите, чтобы ваш журнал проглатывание системы для удаления документов, которые уже существуют в вашем индексе? –

+2

@AlainCollins: Logstash - это общий ETL, а использование журналов - только один случай из многих других, которые он может обрабатывать. Я бы сказал, что случай с кариной - вполне действительный. – Val

+0

Val прав, мы не используем logstash для записи журналов, а других типов объектов, и нам необходимо регулярно обновлять индексы. мы получаем дельта-файл csv с удаленными/обновленными и новыми объектами. – karina

ответ

1

Это, безусловно, можно делать то, что вы предлагаете, но если вы используете Logstash 1.5, вы должны использовать протокол transport как есть ошибка в Logstash 1.5 при выполнении delete сек по протоколу HTTP (см issue #195)

Так что, если ваш delete.csv CSV файл отформатирован так:

id 
12345 
12346 
12347 

И ваш delete.conf Logstash конфигурации выглядит следующим образом:

input { 
    file { 
     path => "/path/to/your/delete.csv" 
     start_position => "beginning" 
     sincedb_path => "/dev/null" 
    } 
} 
filter { 
    csv { 
     columns => ["id"] 
    } 
} 
output { 
    elasticsearch{ 
     action => "delete" 
     host => "localhost" 
     port => 9300       <--- make sure you have this 
     protocol => "transport"    <--- make sure you have this 
     index => "your_index"    <--- replace this 
     document_type => "your_doc_type"  <--- replace this 
     document_id => "%{id}" 
    } 
} 

Затем при запуске bin/logstash -f delete.conf вы сможете удалить все документы, идентификатор которых указан в вашем файле CSV.

+0

Спасибо Val Я попробую прямо сейчас. Я не пытался установить протокол на что-либо еще, что значение по умолчанию. – karina

+0

Он полностью сработал !!! Большое спасибо! – karina

+0

Удивительный, рад, что я мог бы помочь! – Val

0

В дополнение к ответу Валя я бы добавил, что если у вас есть один вход, в котором есть соединение удаленных и перевернутых строк, вы можете сделать это, если у вас есть флаг, который идентифицирует те, которые нужно удалить. Параметр output > elasticsearch > action может быть «ссылкой на поле», что означает, что вы можете ссылаться на поле для каждой строки. Более того, вы можете изменить это поле в поле метаданных, чтобы его можно было использовать в полевой ссылке без индексации.

Например, в вашем filter разделе:

filter { 
    # [deleted] is the name of your field 
    if [deleted] { 
     mutate {  
      add_field => { 
       "[@metadata][elasticsearch_action]" => "delete" 
      } 
     } 
     mutate { 
      remove_field => [ "deleted" ] 
     } 
    } else { 
     mutate {  
      add_field => { 
       "[@metadata][elasticsearch_action]" => "index" 
      } 
     } 
     mutate { 
      remove_field => [ "deleted" ] 
     } 
    } 
} 

Затем, в выходном сечении, ссылаться на поле метаданных:

output { 
    elasticsearch { 
     hosts => "localhost:9200" 
     index => "myindex" 
     action => "%{[@metadata][elasticsearch_action]}" 
     document_type => "mytype" 
    } 
} 
Смежные вопросы