gpt4 book ai didi

c# - 使用 NEST IndexMany<> 的 RoutingMissingException

转载 作者:行者123 更新时间:2023-12-02 22:52:08 25 4
gpt4 key购买 nike

我一直致力于将我的 ElasticSearch (ES) 0.9 代码转换为与 ES 1.0 一起使用。这需要将 NEST 升级到最新的预发布版本。

我一直在尝试批量索引一组子文档。我已将他们的映射设置为:

"stocks": {           
"_parent": {
"type": "products"
},
"_timestamp": {
"enabled": true
},
"properties": {
"id": {
"type": "integer",
"index": "not_analyzed"
},
"stock": {
"type": "integer",
"index": "not_analyzed"
}
}
}

这是在 ES 0.9 中创建的。当我将它放入 ES 1.0 时,它会自动添加一个路由属性,并将“必需”设置为“真”。在 Google 上的搜索表明,启用父子文档设置始终需要这样做,但是当我检查 0.9 分片中的文档时,该属性从未明确出现过。

“好吧……”我心想。接下来,我有以下 NEST 代码块:
 var bulkParams = postQueue.Select(p => new BulkParameters<Stock>(p) { Parent = p.id.ToString()});
IElasticsearchResponse c = ec.IndexMany(bulkParams, null, "stocks").ConnectionStatus;

这将返回 NullReferenceException。经过一番猜测后,我将 Id 参数添加到 BulkParameters 中:
 var bulkParams = postQueue.Select(p => new BulkParameters<Stock>(p) { Id = p.id.ToString(), Parent = p.id.ToString()});

这似乎可行,但请求返回来自 ES 的错误响应:

带有 JSON 错误消息的 400 错误请求:

error=RoutingMissingException[[test_index]/[stocks]/[xx]] 需要路由

(其中 xx 是文档的 ID)

我假设我必须在某处插入一个路由字符串,但我不知道在哪里。我尝试在 BulkParameters 中添加一个“路由”参数,但这根本不起作用。有人可以请教吗?

最佳答案

支持IndexMany()带包裹BulkParameters已在 NEST 1.0.0 beta 1 中删除

如果您想使用具有更高级参数的批量,您现在必须使用 Bulk()命令。

遗憾的是,Beta 版仍然随 BulkParameters 一起提供。类(class) in the assembly

这已在开发分支中删除,并将在下一次 beta 更新中发布。

所以现在发生的事情是你实际上是在索引 "bulkparameters``1``"输入文件而不是 "stock"具有适当的单个批量元数据集。

here for an example关于如何使用Bulk()在为单个项目配置高级参数时一次索引多个对象。

关于c# - 使用 NEST IndexMany<> 的 RoutingMissingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23788147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com