当 _id 等于特定字段时尝试使用 Elasticsearch Bulk API

Attempting to use Elasticsearch Bulk API when _id is equal to a specific field

我正在尝试将文档批量插入到索引中。我需要让 _id 等于我插入的特定字段。我正在使用 ES v6.6

POST productv9/_bulk
{ "index" : { "_index" : "productv9", "_id": "in_stock"}}
{ "description" : "test", "in_stock" : "2001"}

GET productv9/_search
{
  "query": {
    "match": {
      "_id": "2001"
    }
  }
}

当我 运行 批量声明时 运行 没有任何错误。但是,当我 运行 搜索语句时,它没有得到任何匹配。此外,我还有许多其他文档想以同样的方式插入。

我建议做的是创建一个 ingest pipeline,它将根据 in_stock 字段的值设置文档的 _id

首先创建管道:

PUT _ingest/pipeline/set_id
{
  "description" : "Sets the id of the document based on a field value",
  "processors" : [
    {
      "set" : {
        "field": "_id",
        "value": "{{in_stock}}"
      }
    }
  ]
}

然后您可以在批量调用中引用管道:

POST productv9/doc/_bulk?pipeline=set_id
{ "index" : {}}
{ "description" : "test", "in_stock" : "2001"}

通过致电 GET productv9/_doc/2001 您将获得您的文件。