串流表達式

串流表達式將 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":"1800flowers.133139412@s2u2.com","to":"lcampbel@enron.com"},
   {"from":"1800flowers.93690065@s2u2.com","to":"jtholt@ect.enron.com"},
   {"from":"1800flowers.96749439@s2u2.com","to":"alewis@enron.com"},
   {"from":"1800flowers@1800flowers.flonetwork.com","to":"lcampbel@enron.com"},
   {"from":"1800flowers@1800flowers.flonetwork.com","to":"lcampbel@enron.com"},
   {"from":"1800flowers@1800flowers.flonetwork.com","to":"lcampbel@enron.com"},
   {"from":"1800flowers@1800flowers.flonetwork.com","to":"lcampbel@enron.com"},
   {"from":"1800flowers@1800flowers.flonetwork.com","to":"lcampbel@enron.com"},
   {"from":"1800flowers@shop2u.com","to":"ebass@enron.com"},
   {"from":"1800flowers@shop2u.com","to":"lcampbel@enron.com"},
   {"from":"1800flowers@shop2u.com","to":"lcampbel@enron.com"},
   {"from":"1800flowers@shop2u.com","to":"lcampbel@enron.com"},
   {"from":"1800flowers@shop2u.com","to":"ebass@enron.com"},
   {"from":"1800flowers@shop2u.com","to":"ebass@enron.com"},
   {"EOF":true,"RESPONSE_TIME":33}]}
}

請注意,上述範例串流中的最後一個元組是 {"EOF":true,"RESPONSE_TIME":33}EOF 表示串流的結束。若要處理 JSON 回應,您需要使用串流 JSON 實作,因為串流表達式旨在返回整個結果集,其中可能包含數百萬筆記錄。在您的 JSON 用戶端中,您需要迭代每個文件(元組),並檢查 EOF 元組以確定串流的結束。

組態設定

串流表達式的逾時時間可以使用 socketTimeoutconnTimeout 啟動參數來設定。

新增自訂表達式

透過實作 Expressible 介面,可以輕鬆建立您自己的自訂表達式。若要將自訂表達式新增至 /stream/graph 處理器的已知映射清單,您只需透過以下方式在 solrconfig.xml 中將其宣告為外掛程式即可:

<expressible name="custom" class="org.example.CustomStreamingExpression"/>

語言元素

串流來源

串流來源會產生串流。有多種搜尋、取樣和聚合串流來源可供選擇。

所有可用來源表達式的完整參考資料,請參閱串流來源參考

串流裝飾器

串流裝飾器會包裝串流來源和其他串流裝飾器,以轉換串流。

所有可用裝飾器表達式的完整參考資料,請參閱串流裝飾器參考

數學表達式

數學表達式是一個向量和矩陣數學函式庫,可以與串流表達式結合使用,以執行分析和建立結果集的數學模型。從語言的角度來看,數學表達式是串流表達式的一個子語言,它不返回元組串流。相反地,它們對數字、向量、矩陣和數學模型進行操作並返回這些值。文件將說明如何結合串流表達式和數學表達式。

數學表達式使用者指南請參閱串流表達式和數學表達式

從語言的角度來看,數學表達式被稱為串流評估器

所有可用評估器表達式的完整參考資料,請參閱串流評估器參考

視覺化

串流表達式和數學表達式的視覺化是使用 Apache Zeppelin 和 Zeppelin-Solr Interpreter 完成的。

視覺化串流表達式和設定 Apache Zeppelin 的說明,請參閱Zeppelin-Solr Interpreter

串流表達式和數學表達式對視覺化技術進行了深入探討。

串流螢幕

  • 串流螢幕:提交串流表達式並查看結果和剖析說明。