我正在编写一个解析数据并将其插入Elastic Search的应用程序。插入过程非常耗时,我需要允许我的用户在插入仍然继续时查看插入的数据。我的所有数据库元素都实现了一个名为IExtractionObject
的基本接口。我尝试了以下代码:
public IEnumerable<IExtractionObject> GetItems(IEnumerable<Type> types, long objectCategory, int size = 50)
{
var from = 0;
var result = Search(types, objectCategory, from, size);
while(result.Documents.Any())
{
foreach (var extractionObject in result.Documents)
{
yield return extractionObject;
}
from += size + 1;
result = Search(types, objectCategory, from, size);
}
}
private IQueryResponse<IExtractionObject> Search(IEnumerable<Type> types, long objectCategory, int from, int size)
{
return ElasticClient.Search<IExtractionObject>(srch => srch
.Types(types.Distinct())
.Query(q => q.Term(i => i.ObjectCategory, objectCategory))
.From(from)
.Size(size));
}
我的问题是,当我有超过500个元素的数量时,我几乎总是提取相同的元素两次。我读到我应该使用Scroll
方法,但我认为它需要一个具体的类型。是否有其他方法可以处理此问题,或者是否有办法通过Scroll
加载抽象数据。
请帮忙,
以斯哈