簡體   English   中英

Elasticsearch:在較舊版本上有效,但在較新版本上無效

[英]Elasticsearch: upsert working on older version but not on newer version

我有一個批量運行的upsert查詢。 最終文件應這樣存儲:

{
  "email": "abc@xyz.com",
  "sources": [1,2]
}

這是代碼:

var doc = {
  "source": parseInt(id),
  "email": email
}

var upsert_query = {
  "script": "if (ctx._source.containsKey(\"sources\")) { if (!ctx._source.sources.contains(source)) { ctx._source.sources += source; } } else {ctx._source.sources = [source] }",
  "params": {
    "source": doc.source
  },
  "upsert": {
    "email": doc.email,
    "sources": [doc.source]
  }
}

bulkRequestBody.push({"update": {"_index": "my_index", "_type": "email", "_id": doc.email, "_retry_on_conflict": 3}});
bulkRequestBody.push(upsert_query);

該代碼在Elasticsearch 1.4版上可以正常工作,但在2.1.1版上不能正常工作。

我還嘗試重組查詢:

var upsert_query = {
  "script": {
    "inline": "if (ctx._source.containsKey(\"sources\")) { if (!ctx._source.sources.contains(source)) { ctx._source.sources += source; } } else {ctx._source.sources = [source] }",
    "params": {
      "source": doc.source
    }
  },
  "upsert": {
    "email": doc.email,
    "sources": [doc.source]
  }
}

但仍然沒有運氣。 有什么幫助嗎?

需要啟用腳本來運行以下腳本:

在config的elasticsearch.yml文件中,添加以下行:

script.inline: on
script.indexed: on

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM