导出结果集

/export 请求处理器允许使用特殊的排序查询解析器响应写入器,将完全排序的结果集流式传输出 Solr。它们经过专门设计,可以协同工作来处理涉及排序和导出数百万条记录的场景。

此功能使用流式排序技术,该技术会在几毫秒内开始发送记录,并继续流式传输结果,直到整个结果集被排序和导出。

此功能可能适用的情况包括:会话分析、分布式合并连接、时间序列汇总、高基数字段的聚合、完全分布式字段折叠和基于排序的统计信息。

字段要求

所有被排序和导出的字段的 docValues 都必须设置为 true。有关更多信息,请参阅有关DocValues的部分。

/export 请求处理器

具有适当配置的 /export 请求处理器是 Solr 的开箱即用请求处理器之一 - 有关更多信息,请参阅隐式请求处理器

请注意,此请求处理器的属性被定义为“不变量”,这意味着它们不能被稍后传递的其他属性覆盖(例如在查询时)。

请求结果导出

您可以使用 /export 发出请求以导出查询的结果集。

所有查询都必须包含 sortfl 参数,否则查询将返回错误。还支持过滤器查询。

可选参数 batchSize 确定部分结果的内部缓冲区大小。默认值为 30000,但用户可能希望指定较小的值以限制内存使用(以性能降低为代价),或者指定较高的值以提高导出性能(这种关系不是线性的,较大的值不会带来成比例的性能提升)。

支持的响应写入器是 jsonjavabin。出于向后兼容性的原因,也支持将 wt=xsort 作为输入,但 wt=xsort 的行为与 wt=json 相同。默认输出格式为 json

以下是导出一些已索引日志数据的请求示例

https://127.0.0.1:8983/solr/core_name/export?q=my-query&sort=severity+desc,timestamp+desc&fl=severity,timestamp,msg

指定排序条件

sort 属性定义文档在导出的结果集中的排序方式。结果可以按任何字段类型为 int、long、float、double、string 的字段排序。排序字段必须是单值字段。

随着您添加更多的排序字段,导出性能会变慢。如果 JVM 之外有足够的物理内存可用来加载排序字段,那么随着排序字段的添加,性能将会线性地变慢。否则可能会更糟。

指定字段列表

fl 属性定义了结果集中将导出的字段。任何可以排序的字段类型(即 int、long、float、double、string、date、boolean)都可以在字段列表中使用。这些字段可以是单值或多值。

可以使用通配符模式来表示字段列表(例如,fl=*_i),并且它将被扩展为与该模式匹配并且可以导出的字段列表,请参阅字段要求

目前不支持返回分数。

指定本地流式表达式

可选的 expr 属性定义了一个流式表达式,它允许在结果集导出之前在本地处理文档。

表达式必须使用特殊的 input() 流,该流代表来自 /export 处理程序的原始结果。流式表达式的输出然后成为 /export 处理程序的输出。 对于此流式表达式,始终设置 &streamLocalOnly=true 标志。

在这些表达式中,仅支持流修饰符求值器- 使用任何表达式(预定义的 input() 除外)将导致错误。

由于本地内存中减少了要返回的文档数量,将流式表达式与 /export 处理程序一起使用可能会显著提高性能。

这是一个使用 top 修饰符仅返回前 N 个结果的示例

https://127.0.0.1:8983/solr/core_name/export?q=my-query&sort=timestamp+desc,&fl=timestamp,reporter,severity&expr=top(n=2,input(),sort="timestamp+desc")

(请注意,top 修饰符中的排序规范必须与处理程序参数中的排序规范匹配)。

这是一个使用 unique 修饰符的示例

https://127.0.0.1:8983/solr/core_name/export?q=my-query&sort=reporter+desc,&fl=reporter&expr=unique(input(),over="reporter")

(请注意,over 参数必须使用 fl 参数中请求的字段之一)。

分布式支持

有关分布式支持,请参阅流式表达式部分。