elasticsearch 弹性-批量上传:索引x更新,elasticsearch,indexing,bulk,elasticsearch,Indexing,Bulk" /> elasticsearch 弹性-批量上传:索引x更新,elasticsearch,indexing,bulk,elasticsearch,Indexing,Bulk" />

elasticsearch 弹性-批量上传:索引x更新

elasticsearch 弹性-批量上传:索引x更新,elasticsearch,indexing,bulk,elasticsearch,Indexing,Bulk,我要执行2次出色的批量上传,每次上传的顺序完全不可预测 在一次加载中,我会有以下字段:SERVER\u NAME,OS,和PROD\u 1\u VERSION 在另一个字段中,我将有以下字段:SERVER\u NAME,OS,和PROD\u 2\u VERSION 我的文件如下所示: {"index":{"_index" : "myindex", "_id" : "MY_SERVER_1" }}

我要执行2次出色的批量上传,每次上传的顺序完全不可预测 在一次加载中,我会有以下字段:
SERVER\u NAME
OS
,和
PROD\u 1\u VERSION
在另一个字段中,我将有以下字段:
SERVER\u NAME
OS
,和
PROD\u 2\u VERSION

我的文件如下所示:

{"index":{"_index" : "myindex", "_id" : "MY_SERVER_1" }}
{"SERVER_NAME":"MY_SERVER_1","OS":"Ubuntu","PROD_1_VERSION":"1.0.0.5" }
{"index":{"_index" : "myindex", "_id" : "MY_SERVER_2" }}
{"SERVER_NAME":"MY_SERVER_2","OS":"Windows10","PROD_1_VERSION":"2.0.0.0" }
{"index":{"_index" : "myindex", "_id" : "MY_SERVER_3" }}
{"SERVER_NAME":"MY_SERVER_3","OS":"Fedora","PROD_1_VERSION":"2.5.0.1" }
if record exit, 
   use behave like 'index'
else
   behave like 'update'
以及:

  • 如果我按照给定的顺序加载,并使用
    “index”
    将添加属性
    “PROD\u 2\u VERSION”
    ,但
    “PROD\u 1\u VERSION”
    将丢失
  • 如果我修改它,并使用
    “update”
    而不是
    “index”
    (包括属性之前的
    {“doc”:…}
    ),第一次加载将失败,因为它试图更新一些尚不存在的内容
  • 如果第一个加载有
    “index”
    ,第二个加载有
    “update”
    ,则它可以工作,但是,如上所述,无法控制每个加载发生的顺序
有没有办法让它像这样工作:

{"index":{"_index" : "myindex", "_id" : "MY_SERVER_1" }}
{"SERVER_NAME":"MY_SERVER_1","OS":"Ubuntu","PROD_1_VERSION":"1.0.0.5" }
{"index":{"_index" : "myindex", "_id" : "MY_SERVER_2" }}
{"SERVER_NAME":"MY_SERVER_2","OS":"Windows10","PROD_1_VERSION":"2.0.0.0" }
{"index":{"_index" : "myindex", "_id" : "MY_SERVER_3" }}
{"SERVER_NAME":"MY_SERVER_3","OS":"Fedora","PROD_1_VERSION":"2.5.0.1" }
if record exit, 
   use behave like 'index'
else
   behave like 'update'

我不确定是否完全理解您的用例。但要在弹性搜索中批量“插入”(插入或更新),您必须添加

"doc_as_upsert" : true 
在你的文档部分之后

以下是以下示例:


你确定你的伪代码吗?我是这样读的:如果记录已经存在,索引数据(为什么?),否则如果它不存在,更新它(你怎么能更新不存在的东西)…我的意思几乎是相反的。。。如果我在两个加载上都使用“index”,当第二个加载运行时,添加一些字段(在本例中为“PROD_2_VERSION”),则在第一个加载上添加的字段将丢失。如果我在两个加载上都使用“更新”,那么第一个加载将失败,因为没有要更新的记录。所以我需要在第1页有“索引”,在第2页有“更新”。。。但我无法预测哪一个会先跑。正如@Jaycreation所回答的,在“更新”中使用“doc\u As\u upsert”解决了这个问题!如果伪代码一开始是正确的,我会这么建议;-)“doc_as_upsert”正是我所缺少的,非常感谢@Jaycreation!!!我对Elastic完全是新手,而我得到的“指导”文件却没有涵盖这一点!学习曲线很长,有弹性。所以,别担心,你会发现很多这样的细节。如果您需要加快进度,可以通过我个人资料中的网站与我联系