.NET Core接入ElasticSearch 7.5 (3)

image

查询操作:

image

项目升级过程中遇到的问题

分页查询过慢:

初次的查询使用了深度分页(from-size)查询,当数据达到百万千万级别时,已经慢的让人忍无可忍。所谓深度查询就是涉及到大量 shard 的查询时直接跳页到几千甚至上万页的数据协调节点就有宕机的风险毕竟协调节点需要将大量数据汇总起来进行排序耗费大量的内存和 CPU 资源。所以慎用!尽可能用 Scroll API 即只允许拿到下一页的信息不允许跳页的情况出现会避免这种情况的发生。

后来改用了快照分页(scroll),整个查询过程非常稳定,方差几乎可以忽略。该查询会自动返回一个_scroll_id,通过这个id(经过base64编码)可以继续查询。查询语句如下::9200/_search/scroll?scroll=1m&scroll_id=c2MkjsjskMkkssllasKKKOzM0NDg1ODpksksks5566HHsaskLLLqi692215。这个语句虽然很快,但是无法做到跳页查询,只能一页一页的查询。

快照分页参考代码如下:

1: var searchResponse = client.Search<ElasticsearchTransaction>(p => 2: p.Query(t => 3: t.Bool(l => l.Filter(f => f.DateRange(m => m.GreaterThanOrEquals(startTime).Field(d => d.PostDate))))) 4: .From(0) 5: .Size(Configurations.SyncSize) 6: .Index("archive") 7: .Sort(s => s.Ascending(a => a.PostDate)).Scroll("60s")); 8: 9: 10: while(某条件) 11: { 12: searchResponse = client.Scroll<ElasticsearchTransaction>("60s", searchResponse.ScrollId); 13: 14: //跳出循环的条件 15: }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyxdj.html