导出结果集
字段要求
所有要排序和导出的字段都必须将 docValues 设置为 true
。有关更多信息,请参阅 DocValues 部分。
/export RequestHandler
具有适当配置的 /export
请求处理程序是 Solr 的开箱即用请求处理程序之一 - 有关更多信息,请参阅 隐式请求处理程序。
请注意,此请求处理程序的属性被定义为“不变式”,这意味着它们不能被其他属性在其他时间(例如查询时间)传递时覆盖。
请求结果导出
您可以使用 /export
对查询的结果集进行导出请求。
所有查询都必须包含 sort
和 fl
参数,否则查询将返回错误。还支持筛选器查询。
可选参数 batchSize
确定部分结果的内部缓冲区大小。默认值为 30000
,但用户可能希望指定较小的值以限制内存使用(以牺牲性能为代价),或指定较高的值以提高导出性能(这种关系不是线性的,较大的值不会带来成比例的性能提升)。
支持的响应编写器是 json
和 javabin
。出于向后兼容性的原因,wt=xsort
也作为输入得到支持,但 wt=xsort
的行为与 wt=json
相同。默认输出格式为 json
。
下面是一个导出某些已索引日志数据的请求示例
http://localhost: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
标志。
将流表达式与 /export
处理程序一起使用可能会由于在内存中减少要返回的文档数量而显著提高性能。
以下是如何使用 top
装饰器仅返回前 N 个结果的示例
http://localhost: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
装饰器的示例
http://localhost:8983/solr/core_name/export?q=my-query&sort=reporter+desc,&fl=reporter&expr=unique(input(),over="reporter")
(请注意,over
参数必须使用 fl
参数中请求的一个字段)。
分布式支持
有关分布式支持,请参阅 流表达式 部分。