gpt4 book ai didi

c# - NEST 的方法 IndexMany 同步运行

转载 作者:行者123 更新时间:2023-12-02 23:30:25 24 4
gpt4 key购买 nike

我在使用 NEST 的方法 IndexMany(批量索引)时遇到了一个小问题。我发现当我将一些项目发送到 elasticsearch 进行索引时,立即返回响应,但此时并非所有文档都被索引。

问题可以很容易地显示在以下代码中:

List<object> objectToIndex = new List<object>(); // assume 3000 items here
ElasticClient client = new ElasticClient(settings);
client.IndexMany(objectsToIndex, indexName, type);

var readResult = client.Search<T>(e => e
.Type(type)
.Index(indexName)
.Query(q => q
.Range(r => r.OnField(t => t.Date).GreaterOrEquals(dates[0]).LowerOrEquals(dates[1]))
)
);
// read result contains only 300-500 items

System.Threading.Thread.Sleep(2000);

readResult = client.Search<T>(e => e
.Type(type)
.Index(indexName)
.Query(q => q
.Range(r => r.OnField(t => t.Date).GreaterOrEquals(dates[0]).LowerOrEquals(dates[1]))
)
);
// readResult contains all 3000 items right now

这对我来说是个问题,因为我需要批量索引所有文档,然后全部阅读。当然,我可以在批量索引之后运行 Thread.Sleep(..),但这不是我的解决方案。

Elasticsearch版本为2.2.0,NEST客户端版本为1.7.2。

那么,有没有办法强制 elastic/NEST 等到所有文档都被索引后再继续?

最佳答案

NEST 2.x is not compatible with Elasticsearch 1.x ;虽然它可能在大多数情况下都有效,但它尚未针对 1.x 进行测试,并且 Elasticsearch 1.x 和 2.x 之间存在重大变化,这些变化反射(reflect)在 NEST 的变化中,例如,服务器错误响应,这将导致运行时的序列化异常。您应该将最新的 NEST/Elasticsearch.Net 1.x ( currently 1.8.0 ) 与 Elasticsearch 1.x 一起使用。

这里需要在索引率和允许新索引的项目可用于搜索之间做出权衡。通过将刷新间隔从 1 秒更改为更长的时间(例如 30 秒),或者在编制索引 (-1) 时完全禁用它,然后在完成后设置回 1 秒,您可能会看到更好的索引率,但需要等待为可供搜索的文档编制索引后的时间更长。相比之下,如果尽快将项目编入索引以供搜索更为重要,那么您可以发送较小的批量大小并在请求中调用刷新,例如

client.Bulk(b => b
.CreateMany(objectToIndex, (c, doc) => c
.Document(doc)
.Type(type)
.Index(indexName)
)
.Refresh()
);

需要注意的是,更频繁地调用刷新可能会增加集群的负载,并且索引将花费更长的时间。

如果您绝对必须等到所有文档都已编制索引,我建议您对搜索进行计数,以减少需要反序列化的响应的大小

var countResponse = client.Count<MyClass>(c => c
.Type(type)
.Index(indexName)
.Query(q => q
.Range(r => r
.OnField(t => t.Date)
.GreaterOrEquals(dates[0])
.LowerOrEquals(dates[1])
)
)
);

var count = countResponse.Count;

关于c# - NEST 的方法 IndexMany 同步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37115233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com