我是elasticsearch的新手并拥有庞大的数据(mysql表中超过16k的巨大行)。我需要将这些数据推送到elasticsearch并面临将索引编入其中的问题。 有没有办法让索引数据更快?如何处理庞大的数据?
答案 0 :(得分:3)
您将向/_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
。我们将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)