【发布时间】:2016-12-30 15:28:29
【问题描述】:
我正在使用 Elasticsearch 5.1.1,在我的索引中批量插入文档,我需要在响应中获取文档字段之一以及自动生成的 _id 以更新数据库。
我一直在尝试以下请求:
curl -XPOST localhost:9200/_bulk?pretty -d '
{ "index" : { "_index" : "articles_201701", "_type" : "articles_type" , "_source_include" : "db_id"} }
{ "db_id" : "value1" }
{ "index" : { "_index" : "articles_201701", "_type" : "articles_type" , "_source_include" : "db_id"} }
{ "db_id" : "value2" }
'
curl -XPOST localhost:9200/_bulk?pretty -d '
{ "index" : { "_index" : "articles_201701", "_type" : "articles_type", "fields" : ["db_id"]} }
{ "db_id" : "value1" }
{ "index" : { "_index" : "articles_201701", "_type" : "articles_type", "fields" : ["db_id"]} }
{ "db_id" : "value2" }
'
curl -XPOST 'localhost:9200/_bulk?pretty&fields=db_id' -d '
{ "index" : { "_index" : "articles_201701", "_type" : "articles_type" } }
{ "db_id" : "value1" }
{ "index" : { "_index" : "articles_201701", "_type" : "articles_type"} }
{ "db_id" : "value2" }
'
其中一些有细微的变化和组合,但没有运气。
不确定这是否可能......
【问题讨论】:
-
使用批量插入文档时,需要申请_index、_type和_Id,如果不申请_id,elasticsearch会为你生成_id,在response中你会得到生成的_id。 Elasticsearch 不生成其他字段
-
感谢您的回答,抱歉,也许我没有解释清楚,我确实需要 ES 来生成 _id 但我也需要它来返回“db_id”字段(是的,我索引,来自文档)以及 _id。这样我可以执行
UPDATE table set elastic_id = :_id WHERE db_id = :db_id之类的操作,也许这不是正确的方法,但是,我认为查询返回的_ids(来自批量插入)以了解db_ids的开销太大......我想做的类似于 pgsql 的INSERT INTO table VALUES (?,?,?) RETURNING id,name -
如果您生成 db_id 为什么需要 elasticsearch 为您返回它?
-
因为我需要使用 elasticsearch _id 更新数据库,所以我只在 ES 索引文档后才知道这一点,但是,由于这是一个批量插入,我得到一个长列表,其中包含单个索引操作的结果(带有_ids)并且不知道哪个db_id与哪个_id配对
-
创建对象数组,每个对象包含 db_Id 和 Id。调用批量设置 db_id 之前,调用批量设置 id 字段与弹性搜索生成的 _id。现在,当您要更新时,您有 Id 和 db_id
标签: elasticsearch elasticsearch-5