- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在努力解决一个问题。我正在构建一个应用程序,我们在其中索引 Elastic 中的 Assets 。 Assets 的本质是非常动态的,因为它们包含客户端元数据,这因客户端而异。
因此,索引是从 C# 中的动态列表构建的。这实际上就像一个魅力。问题是,在使用 C# 接口(interface)时,我无法控制 Elastic 中的 _id 属性。这意味着当我更新文档时,不会更新正确的文档,而是制作新的副本。
我的代码是这样的:
List<dynamic> assets = new List<dynamic>();
var settings1 = new ConnectionSettings(
new Uri("http://localhost:9200")
).DefaultIndex("assets");
var client = new ElasticClient(settings1);
//assets is build here
var indexResponse = client.Indices.Create("assets");
var BulkResponse = client.IndexMany(assets);
这确实有效,而且索引的构建几乎符合我的预期。即使我在动态上有一个名为 Id 的属性,它也没有被正确推断,这意味着文档被赋予了一个由 Elastic 决定的 _Id。因此,下次我使用相同的 Id 运行此代码时,将创建一个新文档而不是更新它。
我一直在上下搜索,但似乎找不到好的解决方案。我尝试过的一件事是:
var bulkResponse = client.Bulk(bd => bd.IndexMany(assets, (descriptor, s) => descriptor.Id(s.Id)));
但这会引发一个我无法在 .net 内核中捕获的错误。这实际上适用于 Elastic 的较低版本,但似乎已被 C# 接口(interface)的 7.2 和 7.0.1 破坏。
非常感谢任何帮助。
最佳答案
允许以下工作
var bulkResponse = client.Bulk(bd => bd.IndexMany(assets, (descriptor, s) => descriptor.Id(s.Id)));
您只需将 Id
类型转换为它的类型。例如,如果它是一个 string
var client = new ElasticClient();
var assets = new dynamic[]
{
new { Id = "1", Name = "foo" },
new { Id = "2", Name = "bar" },
new { Id = "3", Name = "baz" },
};
var bulkResponse = client.Bulk(bd => bd.IndexMany(assets, (descriptor, s) => descriptor.Id((string)s.Id)));
这是一个运行时限制。
关于c# - Elasticsearch 在使用 IndexMany 时推断动态类型的 _id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56986119/
我在使用 NEST 的方法 IndexMany(批量索引)时遇到了一个小问题。我发现当我将一些项目发送到 elasticsearch 进行索引时,立即返回响应,但此时并非所有文档都被索引。 问题可以很
我一直致力于将我的 ElasticSearch (ES) 0.9 代码转换为与 ES 1.0 一起使用。这需要将 NEST 升级到最新的预发布版本。 我一直在尝试批量索引一组子文档。我已将他们的映射设
我正在努力解决一个问题。我正在构建一个应用程序,我们在其中索引 Elastic 中的 Assets 。 Assets 的本质是非常动态的,因为它们包含客户端元数据,这因客户端而异。 因此,索引是从 C
我在使用 NEST 中的批量方法将索引子记录到 Elasticsearch 中时遇到问题。 我正在使用 ElasticSearch 2.3.5 和 NEST 2.4.4 我已经映射了一个索引:
我尝试使用 nest for ElasticSearch 来理解索引选项,我执行了每个选项,这是我的结果: var node = new Uri("http://localhost:9200"
我在使用批量 API (C# NEST v5.4) 插入文档时遇到问题。我有一个文件数组,在这个数组里面有我的 ID。 我的代码是: documents = documents .ToArray();
我是一名优秀的程序员,十分优秀!