Импортировать csv в elasticsearch

Я занимаюсь учебным пособием по созданию "упругих поисков". К сожалению, этот учебник не охватывает первый шаг, который импортирует базу данных csv в elasticsearch.

Я googled найти решение, но это не работает к сожалению. Вот что я хочу достичь и что у меня есть:

У меня есть файл с данными, которые я хочу импортировать (упрощенными)

id,title
10,Homer Night Out
12,Krusty Gets Busted

Я хотел бы импортировать его с помощью logstash. После исследования через Интернет я получаю следующую конфигурацию:

input {
    file {
        path => ["simpsons_episodes.csv"]
        start_position => "beginning"
    }
}

filter {
    csv {
        columns => [
            "id",
            "title"
        ]
    }
}

output {
    stdout { codec => rubydebug }
    elasticsearch {
        action => "index"
        hosts => ["127.0.0.1:9200"]
        index => "simpsons"
        document_type => "episode"
        workers => 1
    }
}

У меня есть проблема с указанием типа документа, поэтому, когда данные импортируются, и я перехожу к http://localhost:9200/simpsons/episode/10 Я ожидаю увидеть результат с эпизодом 10.

Ответ 1

Хорошая работа, вы почти там, вам не хватает идентификатор документа. Вам нужно изменить свой вывод elasticsearch следующим образом:

elasticsearch {
    action => "index"
    hosts => ["127.0.0.1:9200"]
    index => "simpsons"
    document_type => "episode"
    document_id => "%{id}"             <---- add this line
    workers => 1
}

После этого вы сможете запросить эпизод с id 10

GET http://localhost:9200/simpsons/episode/10

Ответ 2

Я автор moshe/asticsearch_loader
Я написал ESL для этой конкретной проблемы.
Вы можете скачать его с помощью pip:

pip install elasticsearch-loader

И тогда вы сможете загрузить CSV файлы вasticsearch, выполнив:

elasticsearch_loader --index incidents --type incident csv file1.csv

Кроме того, вы можете использовать пользовательский файл идентификатора, добавив --id-field=document_id в командную строку