插入数据时抽象类型的分页

时间:2014-02-03 11:30:38

标签: elasticsearch nest

我正在编写一个解析数据并将其插入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加载抽象数据。

请帮忙,

以斯哈

0 个答案:

没有答案