我正在使用 Elasticsearch docker 镜像版本:docker.elastic.co/elasticsearch/elasticsearch:7.16.2
为了让 ElasticSearch 接受客户端在
UUID
字段上自定义的 _id
,我必须将: "dynamic": "strict"
属性更改为 true
。
一直以来,我们一直在
_id
字段中使用严格且自动生成的 UUID。
在检查新插入的文档时,我注意到添加了一个新字段:id,其内容与 _id 元数据字段完全匹配。
这是预期的行为吗?这是实现我打算做的事情的正确方法吗?客户端生成 UUID,然后通过批量插入方法推送到 ELASTIC。
我正在使用 c# 和 dotnet 7 中的 Nest nuget 包。
感谢您的阅读。
当我尝试通过邮递员插入单个文档时:
可以看到,客户端生成的UUID被分配到了
_id
字段。 Elastic 只是忽略该值并自动为我生成一个新值。
不,这不是预期的行为。
_id
是一个元数据字段,它不应该是映射的一部分。
所以您不必设置
dynamic: true
。
要在设置
_id
时获取文档,您应该执行以下操作:
POST 77646387/_doc/1
{
"some": "data"
}
当您搜索此文档时,您应该找到
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "77646387",
"_id": "1",
"_score": 1,
"_source": {
"some": "data"
}
}
]
}
}