elastic-防止更新文档

d5vmydt9  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(2)|浏览(698)

我能使文件不变吗?例如,当一个文档提交到同一个id时,它们不需要重写吗?

POST "localhost:9200/index001/_doc/1" // First time it is created
'
{
  "stuff": {

  }
}
'

POST "localhost:9200/index001/_doc/1"  // Fails
'
{
  "otherstuff": {

  }
}
'

elastic的版本字段是否可以帮助解决这个问题?

aiqt4smr

aiqt4smr1#

如果你使用 index API 有特定的 id ,elasticsearch将用较新的文档更新该文档。但是如果你用create API 特定的 id ,您允许elasticsearch搜索“如果不存在则放置”行为。意思是,通过使用 create ,则文档索引操作将失败 id 已存在于 index . 这就是你可以使用 create 在elasticsearch lower 7中:

POST index001/_doc/1?op_type=create
'
{
  "stuff": {

  }
}
'

这是用于elasticsearch 7:

POST index001/_create/1
'
{
  "stuff": {

  }
}
'
amrnrhlw

amrnrhlw2#

默认情况下,elasticsearch文档是不可变的,因为它们存储在不可变的段中,对现有文档的任何更新都意味着(创建新文档并将旧文档标记为已删除)。但这并不意味着它们在外部是不变的。
您只需使用 GET 在发送更新请求之前基于文档id的api,或者如果您希望避免额外的api调用,请使用乐观的es锁文档并相应地实现,以避免对文档进行进一步的更新。

相关问题