本文演示如何使用Web API将数据从Elasticsearch导出到CSV文件。 使用_search扫描和滚动从Elasticsearch检索数据。 该API可以非常快速地检索数据,无需任何排序。 然后使用来自Jordan Gray的WebApiContrib.Formatting.Xlsx将数据导出到CSV文件。 导出的进度显示在使用SignalR(MVC razor视图)的HTML页面中。
建立
导出使用在上一篇文章中创建的人物索引。 使用别名persons访问此索引persons_v2。 由于索引几乎没有数据,约20000条记录,导出可以导出为单个CSV文件或单个块。
Person类用于从Elasticsearch检索数据,并将数据导出到CSV文件。 根据需要添加不同的属性。
现在数据模型已经准备就绪,可以实现导出。 这是在PersonsCsvExportController类中完全实现的。 GetPersonsCsvExport方法获取数据,将其导出为CSV文件,并使用SignalR将诊断消息添加到HTML页面。
Elasticsearch扫描并滚动与ElasticsearchCRUD
扫描和滚动功能可用于快速选择数据,无需任何排序,因为排序是一项很花费时间的操作。 使用_search API(SearchCreateScanAndScroll)的第一个请求定义了扫描的查询,并返回此查询的匹配总数以及scrollId。
此scrollId然后用于检索下一个滚动。 扫描配置有ScanAndScrollConfiguration类。 该类定义在定义的时间限制内要检索的项目数量(最大)。 如果定义了300,并且索引具有5个分片,则如果服务器可以在时间限制内完成此操作,则1500个文档将被滚动请求。
所有以下滚动请求都会返回一个新的scrollId,然后将其用于下一个滚动(n + 1)。 直到扫描中的所有文档都被选中为止。
ElasticsearchCRUD TraceProvider使用SignalR
该示例还跟踪使用SignalR的所有ElasticsearchCRUD消息。 创建一个IHubContext,然后在SignalRTraceProvider中使用它
如果跟踪事件级别的值低于构造函数中定义的最小值,则TraceProvider会向所有客户端发送消息。
SignalR可以从NuGet下载并设置如下:(有关更多信息,请参阅ASP.NET SignalR文档)
SignalR HTML客户端配置如下:
可以在Home / Index MVC视图中查看或使用下载和诊断:
并且下载的CSV与Elasticsearch数据导出:
如果您需要在未分类的领地中从Elasticsearch中选择大量的数据,扫描和滚动将非常有用。 这对于备份,重新建立索引或将数据导出到不同的介质中很有用。