流源参考

search 函数搜索 SolrCloud 集合并发出与查询匹配的元组流。这与标准 Solr 查询非常相似,并使用许多相同的参数。

此表达式允许您使用 qt 参数指定请求处理程序。默认情况下,使用 /select 处理程序。/select 处理程序可用于表达式的简单快速原型制作。但是,对于生产,您很可能希望使用 /export 处理程序,该处理程序旨在对整个结果集进行 sortexport。默认情况下不使用 /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 函数。

search 语法

expr=search(collection1,
       zkHost="localhost:9983",
       qt="/export",
       q="*:*",
       fl="id,a_s,a_i,a_f",
       sort="a_f asc, a_i asc")

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(*)))

echo

echo 函数返回一个元组,回显其文本参数。Echo 是最简单的流源,旨在为文本分析流装饰器提供文本。

echo 语法

echo("Hello world")

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 表达式的指标聚合到单个结果中;仅支持 countminmaxsumavg 指标。客户端应用程序可以通过设置 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。

features 参数

  • collection:(强制)保存训练集的集合

  • q:(强制)定义训练集的查询。特征的 IDF 将针对匹配查询的结果集专门生成。

  • featureSet:(强制)特征集的名称。如果特征存储在 SolrCloud 集合中,可以使用此名称检索特征。

  • field:(强制)从中提取特征的文本字段。

  • outcome:(强制)定义类别(正面或负面)的字段

  • numTerms:(强制)要提取的特征术语数。

  • positiveLabel: (默认为 1) 结果字段中定义正结果的值。

features 语法

features(collection1,
         q="*:*",
         featureSet="features1",
         field="body",
         outcome="out_i",
         numTerms=250)

cat

cat 函数读取指定的文件或目录,并将文件中的每一行作为元组发出。

每个发出的元组包含两个字段:filelinefile 包含相对于 userfiles chroot(直接位于 $SOLR_HOME 下)的文件的路径,line 包含该文件中的某一行。

cat 最好与 update 流一起使用,以从指定文档中索引数据,或与 analyze 流一起使用,以进一步将行拆分为各个令牌,以便进行统计处理或可视化。

cat 参数

  • filePaths: (强制) 要从中读取行的文件路径的逗号分隔列表。如果指定路径是目录,它将被递归爬取,并且将读取所有包含的文件。为了防止恶意用户从 Solr 节点读取任意文件,filePaths 必须是相对于运行流表达式的节点上的 $SOLR_HOME/userfiles chroot 的相对路径。此目录必须由用户创建。

  • maxLines: (默认为 -1) 要读取的最大行数(和要发出的元组数)。如果指定负值,则指定文件中的所有行将作为元组发出。文件将按照它们在逗号分隔的 filePaths 参数中出现的顺序读取。如果达到行限制,则这些后面的文件将被部分发出或根本不会读取。

cat 示例

以下示例发出位于 $SOLR_HOME/userfiles/authors.txt 的单个文本文件中的所有行

cat("authors.txt")

此示例将读取 $SOLR_HOME/userfiles/authors.txt 中的行,以及在 $SOLR_HOME/userfiles/fiction/scifi 下(递归地)找到的所有文件。仅发出 500 行,这意味着某些文件可能被部分发出或根本不会读取

cat("authors.txt,fiction/scifi/", maxLines=500)

nodes

nodes 函数提供广度优先图遍历。有关详细信息,请参阅部分 图遍历

knnSearch

knnSearch 函数基于文本相似性为文档返回 k 个最近邻域。在底层,knnSearch 函数使用 More Like This 查询解析器插件。

knnSearch 参数

  • collection: (强制) 要执行搜索的集合。

  • id: (强制) 要从中开始 knn 搜索的源文档的 ID。

  • qf: (强制) 用于比较文档的查询字段。

  • k: (强制) 要返回的最近邻域的数量。

  • fl: (强制) 要返回的字段列表。

  • mindf: (可选,默认为 5)要包含在搜索中的语料库中的最小出现次数。

  • maxdf: (可选)要包含在搜索中的语料库中的最大出现次数。

  • minwl: (可选)要包含在搜索中的最小词长。

  • maxwl: (可选)要包含在搜索中的最大词长。

knnSearch 语法

knnSearch(collection1,
          id="doc1",
          qf="text_field",
          k="10",
          fl="id, title",
          mintf="3",
          maxdf="10000000")

模型

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 通过数组索引对应一个术语。

模型参数

  • collection:(强制性) 存储模型的集合。

  • id:(强制性) 模型的 ID/名称。模型函数始终返回一个模型。如果名称有多个迭代,则返回最高迭代。

  • cacheMillis:(可选) 在 LRU 缓存中缓存模型的时间量。

模型语法

model(modelCollection,
      id="myModel"
      cacheMillis="200000")

random

random 函数搜索 SolrCloud 集合,并发出与查询匹配的一组伪随机结果。每次调用 random 都会返回不同的伪随机结果集。

random 参数

  • collection:(强制性) 将从中聚合统计信息的集合。

  • q:用于构建聚合的查询(强制性)。

  • rows:(强制性) 要返回的伪随机结果数。

  • fl:(强制性) 要返回的字段列表。

  • fq:(可选) 筛选查询

random 语法

random(baskets,
       q="productID:productX",
       rows="100",
       fl="basketID")

在上面的示例中,random 函数正在搜索 baskets 集合中所有 "productID:productX" 的行。它将返回 100 个伪随机结果。返回的字段列表是 basketID。

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)要被视为重要的术语的最小长度。

significantTerms 语法

significantTerms(collection1,
                 q="body:Solr",
                 field="author",
                 limit="50",
                 minDocFreq="10",
                 maxDocFreq=".20",
                 minTermLength="5")

在上面的示例中,significantTerms 函数正在查询 collection1,并从 authors 字段中返回最多 50 个重要术语,这些术语出现在 10 个或更多文档中,但不会超过语料库的 20%。

shortestPath

shortestPath 函数是无权重图遍历的最短路径实现。shortestPath 函数通过无权重图执行迭代广度优先搜索,以查找图中两个节点之间的最短路径。shortestPath 函数为找到的每条路径发出一个元组。发出的每个元组都将包含一个 path 键,该键指向包含组成路径的 nodeID 的 List

shortestPath 参数

  • collection: (强制)将运行主题查询的集合。

  • from: (强制)开始搜索的 nodeID

  • to: (强制)结束搜索的 nodeID

  • edge: (强制)语法:from_field=to_fieldfrom_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 函数。

shuffle 语法

shuffle(collection1,
        q="*:*",
        fl="id,a_s,a_i,a_f",
        sort="a_f asc, a_i asc")

stats

stats 函数收集搜索结果集的简单聚合。stats 函数不支持对存储桶进行汇总,因此 stats 流始终返回一个包含汇总统计信息的元组。在底层,stats 函数使用 StatsComponent 将统计信息的生成推送到搜索引擎中。stats 函数目前支持以下指标:count(*)sum()avg()min()max()

stats 参数

  • collection: (强制)将从中聚合统计信息的集合。

  • q:用于构建聚合的查询(强制性)。

  • metrics: (强制)要包含在结果元组中的指标。当前支持的指标有 sum(col)avg(col)min(col)max(col)count(*)countDist(col)std(col)per(col, 50)per 指标计算数字列的百分位数,并且可以在同一个 stats 函数中多次指定。

stats 语法

stats(collection1,
      q=*:*,
      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(*))

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 指标计算数字列的百分位数,可以在同一时间序列函数中多次指定。

时间序列语法

timeseries(collection1,
           q=*:*,
           field="rec_dt",
           split="customer_s",
           limit="5",
           start="NOW-30DAYS",
           end="NOW",
           gap="+1DAY",
           format="YYYY-MM-dd",
           sum(a_i),
           max(a_i),
           max(a_f),
           avg(a_i),
           avg(a_f),
           std(a_f),
           per(a_f, 50),
           per(a_f, 75),
           count(*))

train

train 函数在存储在 SolrCloud 集合中的训练集上训练逻辑回归文本分类器。它使用并行迭代批量梯度下降方法训练模型。训练算法嵌入在 Solr 中,因此每次迭代时只有模型在网络中传输。

train 函数包装了一个 features 函数,该函数提供用于训练模型的术语和逆文档频率 (IDF)。train 函数在与 features 函数相同的训练集上运行,其中包括类的正例和反例。

每次迭代时,train 函数都会使用模型发出一个元组。该模型包含特征术语、权重和模型的混淆矩阵。然后可以使用经过优化的模型根据文档的特征术语对文档进行分类。

train 参数

  • collection:(强制性)保存训练集的集合

  • q:(强制性)定义训练集的查询。特征的 IDF 将在

  • name:(强制性)模型的名称。如果模型存储在 SolrCloud 集合中,可以使用此名称检索模型。

  • field:(强制)从中提取特征的文本字段。

  • outcome:(强制)定义类别(正面或负面)的字段

  • maxIterations:(强制性)要执行的训练迭代次数。

  • positiveLabel:(默认为 1)结果字段中定义正结果的值。

train 语法

train(collection1,
      features(collection1, q="*:*", featureSet="first", field="body", outcome="out_i", numTerms=250),
      q="*:*",
      name="model1",
      field="body",
      outcome="out_i",
      maxIterations=100)

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 可以不同)。

topic 语法

topic(checkpointCollection,
      collection,
      id="uniqueId",
      q="topic query",
      fl="id, name, country")

tuple

tuple 函数发出一个具有名称/值对的元组。这些值可以设置为在 let 表达式、文字、流评估器或流表达式中分配的变量。对于流评估器,元组将输出评估器的返回值。这可以是数字、列表或映射。如果将值设置为流表达式,则 tuple 函数会将流表达式中的元组流展平为元组列表。

tuple 参数

  • name=value 对

tuple 语法

tuple(a=add(1,1),
      b=search(collection1, q="cat:a", fl="a, b, c", sort="a desc"))