将大量数据索引到Elasticsearch中

时间:2012-05-21 07:41:22

标签: elasticsearch

我是elasticsearch的新手并拥有庞大的数据(mysql表中超过16k的巨大行)。我需要将这些数据推送到elasticsearch并面临将索引编入其中的问题。 有没有办法让索引数据更快?如何处理庞大的数据?

3 个答案:

答案 0 :(得分:3)

扩展Bulk API

您将向/_bulk

发出POST请求

您的有效负载将遵循以下格式,其中\n是换行符。

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

确保您的json打印效果不佳

可用的操作有indexcreateupdatedelete


批量加载示例

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

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

第一行包含操作和元数据。在这种情况下,我们正在调用create。我们将type1类型的文档插入到名为test的索引中,其手动分配的ID为3(而不是弹性搜索自动生成一个)。

第二行包含地图中的所有字段,在此示例中仅为field1,其值为value3

您只需将这些内容连接到您的索引中即可。

答案 1 :(得分:2)

这可能是一个老线程,但我想,无论如何我会评论任何正在寻找这个问题的解决方案的人。 Elastic Search的JDBC河流插件对于从大量受支持的数据库导入数据非常有用。

Link to JDBC' River source here.. 使用Git Bash的curl命令我 PUT 以下配置文档,以允许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文件。

答案 2 :(得分:1)