如何从文本文件中填充弹性搜索索引?

时间:2015-05-26 22:42:40

标签: csv import elasticsearch

我打算使用弹性搜索索引来存储大约有290万条记录的大型城市数据库,并将其用作我的Laravel应用程序的搜索引擎。

问题是:我在MySQL数据库和CSV文件中都有城市。该文件大约有300MB。

如何将其快速导入索引?

2 个答案:

答案 0 :(得分:9)

我已使用Logstash解决了此导入问题。

我的导入脚本是:

input {
      file {
          path => ["/home/user/location_cities.txt"]
          type => "city"
          start_position => "beginning"
      }
}

filter {
    csv {
        columns => ["region", "subregion", "ufi", "uni", "dsg", "cc_fips", "cc_iso", "full_name", "full_name_nd", "sort_name", "adm1", "adm1_full_name", "adm2", "adm2_full_name"]
        separator => "  "
        remove_field => [ "host", "message", "path" ]
    }
}

output {
    elasticsearch {
        action => "index"
        protocol => "http"
        host => "127.0.0.1"
        port => "9200"
        index => "location"
        workers => 4
    }
}

此脚本会将没有分隔符的制表符分隔文件导入名为location且类型为city的索引。

要运行该脚本,需要在安装/解压缩Logstash的文件夹中运行bin/logstash -f import_script_file

答案 1 :(得分:0)

为了提高效率,您需要使用批量API并尝试使用数据块大小。

link to elasticsearch's documentation on bulk document indexing (importing)

如果您使用python,请查看https://pypi.python.org/pypi/esimport/0.1.9