【问题标题】:elasticsearch-js Update document with upsert and paramselasticsearch-js 使用 upsert 和 params 更新文档
【发布时间】:2019-06-19 04:44:37
【问题描述】:

我的文档有一个字段:numberReqs 当我执行时:

client.update({
  index: 'index',
  type: 'type',
  id: 'id',
  body: {
    script: "def docSrc = ctx._source; docSrc.numberReqs+=nubmerReqsToAdd;",
    params: {
      nubmerReqsToAdd: 1
    },
    upsert: {
      numberReqs: 0
    }
  }
}, (err) => { console.log(err) })

即使我提到了 upsert,这段代码也会抛出 document_missing_exception。

【问题讨论】:

    标签: javascript node.js elasticsearch


    【解决方案1】:

    在“doc”对象中提供参数并使用

    doc_as_upsert: 是的

    在体内。

    client.update({
     index: 'index',
     type: 'type',
     id: 'id',
     body: {
      doc: {
       key: value
      },
     doc_as_upsert: true
     }
    }, (err) => { console.log(err) })
    

    【讨论】:

    • 感谢您的回复。但是这里的目标是在文档存在时执行脚本(增量,计算...),文档说:当文档不存在时,使用脚本更新文档或初始化它。
    • 要恢复,我需要用js写这个请求:elastic.co/guide/en/elasticsearch/reference/current/…(第一个例子)
    【解决方案2】:

    你需要告诉 ES 做一个 upsert

    client.update({
      index: 'index',
      type: 'type',
      id: 'id',
      body: {
        script: "def docSrc = ctx._source; docSrc.numberReqs+=nubmerReqsToAdd;",
        params: {
          nubmerReqsToAdd: 1
        },
        scripted_upsert: true, 
        upsert: {
          numberReqs: 0
        }
      }
    }, (err) => { console.log(err) })

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      相关资源
      最近更新 更多