我是 elasticsearch 新手,拥有大量数据(mysql 表中有超过 16k 大行)。我需要将这些数据推送到弹性搜索中,并且在将其索引到其中时遇到问题。有没有办法让索引数据更快?如何处理海量数据?
问问题
10900 次
3 回答
3
扩展批量 API
您将向/_bulk
您的有效负载将遵循以下格式,\n
换行符在哪里。
action_and_meta_data\n
optional_source\n
action_and_meta_data\n
optional_source\n
...
确保你的 json 打印得不是很漂亮
可用的操作是index
、create
和。update
delete
批量加载示例
要回答您的问题,如果您只想将数据批量加载到索引中。
{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }
第一行包含操作和元数据。在这种情况下,我们调用create
. 我们将插入一个类型的文档到以手动分配的 idtype1
命名的索引中(而不是 elasticsearch 自动生成的)。test
3
第二行包含映射中的所有字段,在此示例中field1
,其值为value3
.
您只需连接尽可能多的这些,就像您想插入到您的索引中一样。
于 2014-05-29T20:25:06.327 回答
2
这可能是一个旧线程,但我无论如何都会对任何正在寻找解决这个问题的人发表评论。用于 Elastic Search 的 JDBC River 插件对于从各种受支持的 DB 导入数据非常有用。
在此处链接到 JDBC 的 River 源代码。 使用 Git Bash 的 curl 命令,我放置了以下配置文档以允许 ES 实例和 MySQL 实例之间的通信 -
curl -XPUT 'localhost:9200/_river/uber/_meta' -d '{
"type" : "jdbc",
"jdbc" : {
"strategy" : "simple",
"driver" : "com.mysql.jdbc.Driver",
"url" : "jdbc:mysql://localhost:3306/elastic",
"user" : "root",
"password" : "root",
"sql" : "select * from tbl_indexed",
"poll" : "24h",
"max_retries": 3,
"max_retries_wait" : "10s"
},
"index": {
"index": "uber",
"type" : "uber",
"bulk_size" : 100
}
}'
确保在 river-jdbc 插件目录中拥有mysql-connector-java-VERSION-bin ,其中包含 jdbc-river 必需的 JAR 文件。
于 2013-08-19T12:24:23.837 回答
1
于 2012-05-24T08:44:12.503 回答