流源参考
搜索
search
函数搜索 SolrCloud 集合并发出与查询匹配的元组流。这与标准 Solr 查询非常相似,并使用许多相同的参数。
此表达式允许您使用 qt
参数指定请求处理程序。默认情况下,使用 /select
处理程序。/select
处理程序可用于表达式的简单快速原型制作。但是,对于生产,您很可能希望使用 /export
处理程序,该处理程序旨在对整个结果集进行 sort
和 export
。默认情况下不使用 /export
处理程序,因为它比 /select
处理程序有更严格的要求,因此不容易开始使用。要详细了解 /export
处理程序要求,请查看部分 导出结果集。
search 参数
-
collection
: (强制)正在搜索的集合。 -
q
: (强制)在 Solr 索引上执行的查询。 -
fl
: (强制)要返回的字段列表。 -
sort
: (强制)排序条件。 -
zkHost
: 仅在正在搜索的集合在与本地流处理程序不同的 zkHost 中找到时才需要定义。只有在与您连接的 Solr 实例使用相同的 ZkHost 时,才会包含 Zookeeper 凭据和 ACL(chroot
可以不同)。 -
qt
: 指定要使用的查询类型或请求处理程序。将其设置为/export
以处理大型结果集。默认值为/select
。 -
rows
: (使用/select
处理程序时强制)rows
参数指定要返回的行数。此参数仅在/select
处理程序(这是默认值)中需要,因为/export
处理程序始终返回所有行。 -
partitionKeys
: 按其分区搜索结果的逗号分隔键列表。与并行函数一起使用,以在工作程序节点之间并行化操作。有关详细信息,请参阅 parallel 函数。
drill
drill
函数旨在支持高效的高基数聚合。drill
函数向特定集合中的 export
处理程序发送请求,其中包括 export
处理程序应用于已排序结果集的流表达式。然后,export
处理程序发出聚合元组。drill
函数读取并发出每个分片的聚合元组,保持排序顺序,但不合并聚合。流表达式函数可以包装在 drill
函数周围以合并聚合。
drill 参数
-
collection
: (强制)正在搜索的集合。 -
q
: (强制)在 Solr 索引上执行的查询。 -
fl
: (强制)要返回的字段列表。 -
sort
: (强制)排序条件。 -
expr
:发送到对已排序结果集进行操作的导出处理程序的流表达式。input()
函数提供来自导出处理程序的已排序元组流(见下面的示例)。
Drill 语法
示例 1:基本 drill 语法
drill(articles,
q="abstract:water",
fl="author",
sort="author asc",
rollup(input(), over="author", count(*)))
示例 2:将 rollup
包装在 drill
函数周围,以对从每个分片发出的计数求和。
rollup(drill(articles,
q="abstract:water",
fl="author",
sort="author asc",
rollup(input(), over="author", count(*))),
over="author",
sum(count(*)))
facet
facet
函数提供按存储段汇总的聚合。在底层,facet 函数使用 Solr 的 JSON Facet API 将聚合推送到搜索引擎中。这为许多用例提供了亚秒级性能。facet 函数适用于存储段字段中数量较少到中等数量的不同值。如需支持高基数聚合,请参见 rollup 函数。
facet 参数
-
collection
:将从其聚合 facet 的集合(强制性)。 -
q
:用于构建聚合的查询(强制性)。 -
buckets
:要进行汇总的字段的逗号分隔列表(强制性)。逗号分隔列表表示多维汇总中的维度。 -
bucketSorts
:要应用于 buckets 参数中每个维度的排序的逗号分隔列表(强制性)。排序可以针对计算的指标或存储段值进行。 -
rows
:要返回的行数(默认 10)。“-1” 将返回所有行。 -
offset
:结果集中要开始的偏移量(默认 0)。 -
overfetch
:过度获取用于提供对高基数字段的准确聚合(默认 150)。 -
method
:JSON facet API 聚合方法。 -
bucketSizeLimit
:设置要获取的绝对行数。这与 rows、offset 和 overfetch 不兼容。此值应用于每个维度。“-1” 将获取所有存储段。 -
metrics
:要为存储段计算的指标列表。当前支持的指标为sum(col)
、avg(col)
、min(col)
、max(col)
、count(*)
、countDist(col)
、std(col)
、per(col, 50)
。per
指标计算数字列的百分位数,并且可以在同一个 facet 函数中多次指定。 -
tiered
:(默认 true)控制facet
流是否应使用plist
表达式将 JSON Facet 请求并行化到多个 Solr 集合的标志;此选项仅适用于当collection
是由多个集合支持的别名时。如果启用了tiered
,则内部使用rollup
表达式将多个facet
表达式的指标聚合到单个结果中;仅支持count
、min
、max
、sum
和avg
指标。客户端应用程序可以通过设置solr.facet.stream.tiered=false
系统属性在全局范围内禁用此功能。
facet 语法
示例 1
facet(collection1,
q="*:*",
buckets="a_s",
bucketSorts="sum(a_i) desc",
rows=100,
sum(a_i),
sum(a_f),
min(a_i),
min(a_f),
max(a_i),
max(a_f),
avg(a_i),
avg(a_f),
std(a_f),
per(a_f, 50),
per(a_f, 75),
count(*))
以上示例显示了对单个存储段执行汇总的 facet 函数,其中存储段按计算出的 sum(a_i)
指标值降序返回。
示例 2
facet(collection1,
q="*:*",
buckets="year_i, month_i, day_i",
bucketSorts="year_i desc, month_i desc, day_i desc",
rows=10,
offset=20,
sum(a_i),
sum(a_f),
min(a_i),
min(a_f),
max(a_i),
max(a_f),
avg(a_i),
avg(a_f),
std(a_f),
per(a_f, 50),
per(a_f, 75),
count(*))
以上示例显示了对三个存储段执行汇总的 facet
函数,其中存储段按存储段值降序返回。rows
参数返回 10 行,offset
参数从第 20 行开始返回行。
features
features
函数从存储在 SolrCloud 集合中的分类训练集中提取文本字段中的关键词。它使用一种称为信息增益的算法,从训练集中选择重要术语。features
函数被设计为专门与 train 函数配合使用,后者使用提取的特征训练文本分类器。
features
函数被设计为与提供某个类别的正面和负面示例的训练集配合使用。它为提取的每个特征术语以及训练集中该术语的逆向文档频率 (IDF) 发射一个元组。
features
函数使用查询从集合中选择训练集。每个选定特征的 IDF 相对于匹配查询的训练集进行计算。这允许将多个训练集存储在同一 SolrCloud 集合中,而不会污染训练集之间的 IDF。
cat
cat
函数读取指定的文件或目录,并将文件中的每一行作为元组发出。
每个发出的元组包含两个字段:file
和 line
。file
包含相对于 userfiles
chroot(直接位于 $SOLR_HOME
下)的文件的路径,line
包含该文件中的某一行。
cat
最好与 update
流一起使用,以从指定文档中索引数据,或与 analyze
流一起使用,以进一步将行拆分为各个令牌,以便进行统计处理或可视化。
nodes
nodes
函数提供广度优先图遍历。有关详细信息,请参阅部分 图遍历。
knnSearch
knnSearch
函数基于文本相似性为文档返回 k 个最近邻域。在底层,knnSearch
函数使用 More Like This 查询解析器插件。
模型
api
函数检索并缓存存储在 SolrCloud 集合中的逻辑回归文本分类模型。api
函数旨在与由 训练函数 创建的模型配合使用,但也可以用于检索在 Solr 外部训练的文本分类模型,只要它们符合指定的格式。检索模型后,可由 classify 函数 使用该模型对文档进行分类。
基于 id 参数获取并返回单个模型元组。通过将 id 参数与索引中的模型名称进行匹配来检索模型。如果索引中存储了多个命名模型的迭代,则选择最高迭代。
使用模型进行缓存
api
函数具有内部 LRU(最近最少使用)缓存,因此不必在每次调用 api
函数时检索模型。可以将每个模型 ID 的缓存时间作为参数传递给函数调用。检索缓存的模型不会重置缓存中模型 ID 的过期时间。
模型存储
Solr 中模型的存储格式如下。train
函数输出以下格式,因此只有在计划将 api
函数与在 Solr 外部训练的逻辑回归模型一起使用时,才需要了解架构详细信息。
-
name_s
(单值,字符串,已存储):模型的名称。 -
iteration_i
(单值,整数,已存储):模型的迭代次数。Solr 可以存储训练函数生成的模型的所有迭代。 -
terms_ss
(多值,字符串,已存储):模型的术语/特征数组。 -
weights_ds
(多值,双精度,已存储):术语权重数组。每个权重按数组索引对应一个术语。 -
idfs_ds
(多值,双精度,已存储):术语 IDF(逆文档频率)数组。每个 IDF 通过数组索引对应一个术语。
random
significantTerms
significantTerms
函数查询 SolrCloud 集合,但它不返回文档,而是返回结果集中文档中找到的重要术语。significantTerms
函数根据术语在结果集中出现的频率以及它们在整个语料库中出现的频率对术语进行评分。significantTerms
函数为每个术语发出一个元组,其中包含术语、得分、前景计数和背景计数。前景计数是术语在结果集中出现的文档数。背景计数是术语在整个语料库中出现的文档数。前景计数和背景计数对于集合是全局的。
significantTerms 参数
-
collection
:(强制性) 运行函数的集合。 -
q
:(强制性) 描述前景文档集的查询。 -
field
:(强制性) 提取术语的字段。 -
limit
:(可选,默认 20) 要返回的最大术语数。 -
minDocFreq
:(可选,默认为 5 个文档) 术语必须在分片中出现的最小文档数。这是一个浮点值。如果大于 1.0,则将其视为文档的绝对数。如果小于 1.0,则将其视为文档的百分比。 -
maxDocFreq
: (可选,默认为文档的 30%)术语可以在分片中出现的最大文档数。这是一个浮点值。如果大于 1.0,则将其视为文档的绝对数量。如果小于 1.0,则将其视为文档的百分比。 -
minTermLength
: (可选,默认为 4)要被视为重要的术语的最小长度。
shortestPath
shortestPath
函数是无权重图遍历的最短路径实现。shortestPath
函数通过无权重图执行迭代广度优先搜索,以查找图中两个节点之间的最短路径。shortestPath
函数为找到的每条路径发出一个元组。发出的每个元组都将包含一个 path
键,该键指向包含组成路径的 nodeID 的 List
。
shortestPath 参数
-
collection
: (强制)将运行主题查询的集合。 -
from
: (强制)开始搜索的 nodeID -
to
: (强制)结束搜索的 nodeID -
edge
: (强制)语法:from_field=to_field
。from_field
定义要从中进行搜索的字段。to_field
定义要搜索到的字段。有关详细说明,请参见下面的示例。 -
threads
: (可选:默认为 6)用于在遍历中执行分区连接的线程数。 -
partitionSize
: (可选:默认为 250)连接中每个分区中的节点数。 -
fq
:(可选) 筛选查询 -
maxDepth
: (强制)将搜索限制为图中的最大深度。
shortestPath 语法
shortestPath(collection,
from="[email protected]",
to="[email protected]",
edge="from_address=to_address",
threads="6",
partitionSize="300",
fq="limiting query",
maxDepth="4")
上面的表达式执行广度优先搜索以查找无权重有向图中的最短路径。
搜索从 from_address
字段中的 nodeID "[email protected]" 开始,并在 to_address
字段中搜索 nodeID "[email protected]"。此搜索将以迭代方式执行,直到达到 maxDepth
。遍历中的每一层都实现为跨整个集合的并行分区嵌套循环连接。threads
参数控制在每一层执行连接的线程数,而 partitionSize
参数控制每个连接分区中的节点数。maxDepth
参数控制要遍历的层数。fq
是应用于遍历中每一层的限制查询。
shuffle
shuffle
表达式对整个结果集进行排序和导出。shuffle
表达式类似于 search
表达式,但 shuffle
在底层始终使用 /export 处理程序。shuffle
表达式旨在与需要完整、已排序结果集的关系代数装饰器结合使用。可以使用并行流装饰器对已洗牌的结果集在工作节点间进行分区,以执行并行关系代数。在并行模式下使用时,必须提供 partitionKeys 参数。
shuffle 参数
-
collection
: (强制)正在搜索的集合。 -
q
: (强制)在 Solr 索引上执行的查询。 -
fl
: (强制)要返回的字段列表。 -
sort
: (强制)排序条件。 -
zkHost
: 仅在正在搜索的集合在与本地流处理程序不同的 zkHost 中找到时才需要定义。只有在与您连接的 Solr 实例使用相同的 ZkHost 时,才会包含 Zookeeper 凭据和 ACL(chroot
可以不同)。 -
partitionKeys
: 按其分区搜索结果的逗号分隔键列表。与并行函数一起使用,以在工作程序节点之间并行化操作。有关详细信息,请参阅 parallel 函数。
stats
stats
函数收集搜索结果集的简单聚合。stats 函数不支持对存储桶进行汇总,因此 stats 流始终返回一个包含汇总统计信息的元组。在底层,stats 函数使用 StatsComponent 将统计信息的生成推送到搜索引擎中。stats 函数目前支持以下指标:count(*)
、sum()
、avg()
、min()
和 max()
。
timeseries
timeseries
函数构建时间序列聚合。在底层,timeseries
函数使用 JSON Facet API 作为其高性能聚合引擎。
timeseries 参数
-
collection
: (强制)将从中聚合统计信息的集合。 -
q
:用于构建聚合的查询(强制性)。 -
field
: (强制)时间序列的日期字段。 -
split
: (可选)字符串字段。将为该字段中的每个值生成单独的时间线。 -
limit
: (可选)每个时间段中 split 字段中值的数目限制。Split 值按第一个指标降序排列。 -
start
: (强制)以 Solr 日期或日期数学语法表示的时间序列的开始时间。 -
end
: (强制)以 Solr 日期或日期数学语法表示的时间序列的结束时间。 -
gap
:(强制性)时间序列聚合点之间的时间间隔,以 Solr 日期数学语法表示。 -
format
:(可选)用于设置输出元组中日期字段格式的日期模板。格式设置由 Java 的 SimpleDateFormat 类执行。 -
metrics
:(强制性)要包含在结果元组中的指标。当前支持的指标有:sum(col)
、avg(col)
、min(col)
、max(col)
、count(*)
、countDist(col)
、std(col)
、per(col, 50)
。per
指标计算数字列的百分位数,可以在同一时间序列函数中多次指定。
train
train
函数在存储在 SolrCloud 集合中的训练集上训练逻辑回归文本分类器。它使用并行迭代批量梯度下降方法训练模型。训练算法嵌入在 Solr 中,因此每次迭代时只有模型在网络中传输。
train
函数包装了一个 features 函数,该函数提供用于训练模型的术语和逆文档频率 (IDF)。train
函数在与 features
函数相同的训练集上运行,其中包括类的正例和反例。
每次迭代时,train
函数都会使用模型发出一个元组。该模型包含特征术语、权重和模型的混淆矩阵。然后可以使用经过优化的模型根据文档的特征术语对文档进行分类。
topic
topic
函数提供基于 SolrCloud 构建的发布/订阅消息传递功能。topic 函数允许用户订阅查询。然后,该函数提供匹配主题查询的新文档或更新文档的一次性传递。对 topic 函数的初始调用将为特定主题 ID 建立检查点。对同一主题 ID 的后续调用将返回在初始检查点之后添加或更新的文档。每次运行主题查询都会更新主题 ID 的检查点。将 initialCheckpoint 参数设置为 0 将导致主题处理索引中与主题查询匹配的所有文档。
在 SOLR-8709 提交并发布之前,应将 topic 函数视为测试版。 |
topic 参数
-
checkpointCollection
:(必需)存储主题检查点的集合。 -
collection
: (强制)将运行主题查询的集合。 -
id
:(必需)主题的唯一 ID。检查点将保存在此 ID 下。 -
q
:(必需)主题查询。 -
fl
:(必需)topic 函数返回的字段列表。 -
initialCheckpoint
:(可选)设置初始 Solr_version_
号码以开始从队列中读取。如果未设置,则默认为索引中的最高版本。设置为 0 将处理索引中与查询匹配的所有记录。 -
zkHost
:(可选)仅当在与本地流处理程序不同的 zkHost 中找到要搜索的集合时才需要定义。仅当与您要连接的 Solr 实例使用相同的 ZkHost 时,才会包含 Zookeeper 凭据和 ACL(chroot
可以不同)。