我在使用NEST中的批量方法将索引子记录导入Elasticsearch时遇到问题。
我正在使用ElasticSearch 2.3.5和NEST 2.4.4
我已经映射了一个索引:
myindex
{
"mappings": {
"elasticparent": {},
"elasticchild": {
"_parent": {
"type": elasticparent
}
}
}
}
我使用 IndexMany 方法索引了父对象:
client.IndexMany<elasticparent>(batch, "myindex");
这一切都运作良好。
我现在想使用 IndexMany 为孩子编制索引。这是我到目前为止所尝试的内容:
client.Bulk(s => s.IndexMany(IenumerableOfChild,
(bulkDescriptor, record) =>
bulkDescriptor.Index("myindex").Type("elasticchild").Parent(record.Id)));
子和父共享相同的Id整数。
我没有收到错误,但是孩子们从未被编入索引,并且文档永远不会被添加到总索引计数中。
单独编制索引:
foreach (var child in IenumerableOfChild
{
client.Index(child, descriptor => descriptor
.Parent(child.Id.ToString()).Index("myindex"));
}
我不想单独索引质量数量。我想使用IndexMany批量索引子记录。有人可以指出我做错了吗?
答案 0 :(得分:4)
经过进一步调查后,Elastic Server返回了超时。通过一次将请求批量处理1000个项目,它现在正常工作!
foreach (IEnumerable<object> batch in objects.Batch(1000))
{
var indexResponse = client.Bulk(s => s.IndexMany(batch,
(bulkDescriptor, record) =>
bulkDescriptor.Index("myindex").Parent(record.Id.ToString()).Document(record).Type("elasticchild").Id(record.Id.ToString())));
Console.WriteLine(indexResponse);
}
答案 1 :(得分:1)
您需要添加。查询的路由字段,以便将子代与父代进行映射。 如下所示:-
var indexResponse = elasticService.Bulk(s => s.IndexMany<Child>
(childreslist,
(bulkDescriptor, record) => bulkDescriptor.Index(Constants.INDEX_NAME)
.Type("_doc")
.Routing(new
Routing(record.id.ToString()))
));