弹性 - 防止更新文档
Elastic - prevent updating documents
我可以使文档不可变吗?当文档提交给相同的 id 时,它们不会被重写吗?
POST "localhost:9200/index001/_doc/1" // First time it is created
'
{
"stuff": {
}
}
'
POST "localhost:9200/index001/_doc/1" // Fails
'
{
"otherstuff": {
}
}
'
elastic 的 _version 字段对此有帮助吗?
默认情况下,elasticsearch 文档是不可变的,因为它们存储在不可变的段中,对现有文档的任何更新都意味着(创建新文档并将旧文档标记为已删除)。 但这并不能使它们在外部不可变。
您可以在发送更新请求之前根据文档 ID 简单地使用 GET
API,或者如果您想避免额外的 API 调用,请使用 optimistic locking doc of ES 并相应地实施以避免进一步更新您的文档。
如果您将 index API
与特定的 id
一起使用,elasticsearch 将使用较新的文档更新该文档。但是如果你使用 create API
with specific id
,你允许 elasticsearch 的“put-if-absent”行为。这意味着,通过使用 create
,如果 id
的文档已经存在于 index
中,则文档索引操作将失败。
这就是如何在 elasticsearch lower 7:
中使用 create
POST index001/_doc/1?op_type=create
'
{
"stuff": {
}
}
'
这用于 elasticsearch 7:
POST index001/_create/1
'
{
"stuff": {
}
}
'
我可以使文档不可变吗?当文档提交给相同的 id 时,它们不会被重写吗?
POST "localhost:9200/index001/_doc/1" // First time it is created
'
{
"stuff": {
}
}
'
POST "localhost:9200/index001/_doc/1" // Fails
'
{
"otherstuff": {
}
}
'
elastic 的 _version 字段对此有帮助吗?
默认情况下,elasticsearch 文档是不可变的,因为它们存储在不可变的段中,对现有文档的任何更新都意味着(创建新文档并将旧文档标记为已删除)。 但这并不能使它们在外部不可变。
您可以在发送更新请求之前根据文档 ID 简单地使用 GET
API,或者如果您想避免额外的 API 调用,请使用 optimistic locking doc of ES 并相应地实施以避免进一步更新您的文档。
如果您将 index API
与特定的 id
一起使用,elasticsearch 将使用较新的文档更新该文档。但是如果你使用 create API
with specific id
,你允许 elasticsearch 的“put-if-absent”行为。这意味着,通过使用 create
,如果 id
的文档已经存在于 index
中,则文档索引操作将失败。
这就是如何在 elasticsearch lower 7:
create
POST index001/_doc/1?op_type=create
'
{
"stuff": {
}
}
'
这用于 elasticsearch 7:
POST index001/_create/1
'
{
"stuff": {
}
}
'