我打算使用弹性搜索索引来存储大约有290万条记录的大型城市数据库,并将其用作我的Laravel应用程序的搜索引擎。
问题是:我在MySQL数据库和CSV文件中都有城市。该文件大约有300MB。
如何将其快速导入索引?
答案 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