如何在不知道关系型数据库表结构的情况下,利用.NET API将数据导入ES

作者 hm | 发布于2018年09月04日 | 阅读数:146

我想利用.NET API 写一个关系型数据库往ES数据库导入数据的工具,但是关系型数据库表的结构可能是各种各样的,分别给它们创建类好像不现实,我想直接导入DataTable,但是导不成功。有大神能提供一下解决思路吗?
已邀请:

rochy - rochy_he@jointsky

赞同来自:

.NET 与 ES 交互可以通过 NEST 来实现;
 
从数据库读取的内容可以转换为 Json,然后使用 API 进行提交,可参考下面的代码:
 
string documentJson = JsonConvert.SerializeObject(document.Document);
ElasticsearchResponse<string> result = esClient.Raw.Index(document.Index, document.Type, document.Id, documentJson);

以及下面的代码:
 
List<dynamic> Documents = new List<dynamic>();
BulkDescriptor descriptor = new BulkDescriptor();
foreach(var doc in Documents)
{
descriptor.Index<object>(i => i
.Index("someindex")
.Type("SomeType")
.Id("someid")
.Document(doc));
}
esClient.Bulk(descriptor);

hm

赞同来自:

6.0的NEST没有client.raw啊  ,有没有类似的实现

rochy - rochy_he@jointsky

赞同来自:

你可以使用另外一种,把数据库的一条记录看作 JObject 然后用 Bukl 提交你查询到的一批记录即可,试一下下面的代码:
 
var esClient = new ElasticClient(new Uri("http://127.0.0.1:9200&quot;));
List<obj> Documents = new List<obj>();
BulkDescriptor descriptor = new BulkDescriptor();
foreach(var doc in Documents)
{
descriptor.Index<object>(i => i
.Index("indexName")
.Type("typeName")
.Id("docId")
.Document(doc));
}
esClient.Bulk(descriptor);

要回复问题请先登录注册