6

我是 elasticsearch 新手,拥有大量数据(mysql 表中有超过 16k 大行)。我需要将这些数据推送到弹性搜索中,并且在将其索引到其中时遇到问题。有没有办法让索引数据更快?如何处理海量数据?

4

3 回答 3

3

扩展批量 API

您将向/_bulk

您的有效负载将遵循以下格式,\n换行符在哪里。

action_and_meta_data\n
optional_source\n
action_and_meta_data\n
optional_source\n
...

确保你的 json 打印得不是很漂亮

可用的操作是indexcreate和。updatedelete


批量加载示例

要回答您的问题,如果您只想将数据批量加载到索引中。

{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }

第一行包含操作和元数据。在这种情况下,我们调用create. 我们将插入一个类型的文档到以手动分配的 idtype1命名的索引中(而不是 elasticsearch 自动生成的)。test3

第二行包含映射中的所有字段,在此示例中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

尝试批量 api

http://www.elasticsearch.org/guide/reference/api/bulk.html

于 2012-05-24T08:44:12.503 回答