流式表达式
流式表达式将 SolrCloud 的功能公开为可组合的函数。这些函数提供了一个用于搜索、转换、分析和可视化存储在 SolrCloud 集合中的数据的系统。
从高层次来看,文档中将探讨四个主要功能:
-
搜索、采样和聚合来自 Solr 的结果。
-
从 Solr 检索结果集后进行转换。
-
使用概率、统计和机器学习库分析和建模结果集。
-
可视化结果集、聚合和数据的统计模型。
流语言基础
流式表达式由流式函数组成,这些函数与 Solr 集合一起工作。它们会发出一个元组流(键/值映射)。
一些提供的流式函数旨在处理整个结果集,而不是像正常搜索那样处理前 N 个结果。这由 /export 处理程序支持。
一些流式函数充当流的来源以启动流的流动。其他流式函数充当流装饰器来包装其他流式函数并对元组流执行操作。许多流函数可以在工作集合中并行化。这对于关系代数函数尤其强大。
流式请求和响应
Solr 有一个 /stream
请求处理程序,它接受流式表达式请求并将元组作为 JSON 流返回。此请求处理程序是隐式定义的,这意味着无需在 solrconfig.xml
中定义任何内容 - 请参阅 隐式请求处理程序。
/stream
请求处理程序接受一个参数 expr
,该参数用于指定流式表达式。例如,此 curl 命令对一个简单的 search()
表达式进行编码并通过 POST 发送到 /stream
处理程序
curl --data-urlencode 'expr=search(enron_emails,
q="from:1800flowers*",
fl="from, to",
sort="from asc")' https://127.0.0.1:8983/solr/enron_emails/stream
每个函数的参数详细信息如下所示。
对于上面的示例,/stream
处理程序使用以下 JSON 响应进行响应
{"result-set":{"docs":[
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"from":"[email protected]","to":"[email protected]"},
{"EOF":true,"RESPONSE_TIME":33}]}
}
请注意,上面的示例流中的最后一个元组是 {"EOF":true,"RESPONSE_TIME":33}
。EOF
指示流的结束。要处理 JSON 响应,您需要使用流式 JSON 实现,因为流式表达式旨在返回可能包含数百万条记录的整个结果集。在您的 JSON 客户端中,您需要迭代每个文档(元组)并检查 EOF 元组以确定流的结束。
添加自定义表达式
通过实现 Expressible 接口,可以轻松创建您自己的自定义表达式。要将自定义表达式添加到 /stream
和 /graph
处理程序的已知映射列表中,您只需通过 solrconfig.xml
将其声明为插件。
<expressible name="custom" class="org.example.CustomStreamingExpression"/>
语言元素
数学表达式
数学表达式是一个向量和矩阵数学库,可以与流式表达式结合使用,以执行分析并构建结果集的数学模型。从语言的角度来看,数学表达式是流式表达式的一个子语言,它不返回元组流。相反,它们操作并返回数字、向量、矩阵和数学模型。该文档将展示如何组合流式表达式和数学表达式。
数学表达式用户指南可在 流式表达式和数学表达式 中找到。
从语言的角度来看,数学表达式被称为 **流评估器**。
所有可用评估器表达式的完整参考可在 流评估器参考 中找到。
可视化
流式表达式和数学表达式的可视化都是使用 Apache Zeppelin 和 Zeppelin-Solr Interpreter 完成的。
可视化流式表达式和设置 Apache Zeppelin 的文档在 Zeppelin-Solr Interpreter 中。
流式表达式和数学表达式 对可视化技术进行了深入的介绍。
流屏幕
-
流屏幕:提交流式表达式并查看结果和解析说明。