W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
流表達式為 Solr Cloud 提供了一種簡單而強大的流處理語言。
流式表達式是一組可以組合起來執(zhí)行許多不同的并行計算任務的函數(shù)。這些函數(shù)是并行 SQL 接口的基礎。
有越來越多的函數(shù)庫可以結合起來實現(xiàn):
來自外部系統(tǒng)的流可以與來自 Solr 的流結合,用戶可以通過遵循 Solr 的 Java streaming API 來添加自己的流函數(shù)。
注意:流表達式和流 API 都被認為是實驗性的,并且 API 是可以改變的。
流表達式由與 Solr 集合一起使用的流式函數(shù)組成。它們發(fā)出一串元組(鍵/值映射)。
許多提供的流函數(shù)被設計用來處理整個結果集,而不是像普通搜索那樣的前 N 個結果。這由 /export 處理程序支持。
一些流函數(shù)作為流源來發(fā)起流式流。其他流函數(shù)充當流修飾符來包裝其他流函數(shù)并在元組流上執(zhí)行操作。許多流函數(shù)可以跨工作集合并行化。這對于關系代數(shù)函數(shù)來說可能特別強大。
Solr 有一個 /stream 請求處理程序,它接受流表達式請求并將這些元組作為 JSON 流返回。這個請求處理程序是隱式定義的,這意味著在 solrconfig.xml 中沒有任何定義,請參閱隱式RequestHandlers。
/stream 請求處理程序有一個參數(shù):expr,它是用來指定流表達式。例如,這個 curl 命令將一個簡單的 search() 表達式編碼并發(fā)布到 /stream 處理程序:
curl --data-urlencode 'expr=search(enron_emails,
q="from:1800flowers*",
fl="from, to",
sort="from asc",
qt="/export")' http://localhost:8983/solr/enron_emails/stream
每個函數(shù)的參數(shù)詳情如下。
對于上面的例子,/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 實現(xiàn),因為流表達式旨在返回可能有數(shù)百萬條記錄的整個結果集。在您的 JSON 客戶端中,您需要遍歷每個文檔(元組),并檢查 EOF 元組來確定流的結束。
org.apache.solr.client.solrj.io 軟件包提供了將流表達式編譯到流 API 對象中的 Java 類。這些類可以用來從 Java 應用程序中執(zhí)行流表達式。例如:
StreamFactory streamFactory = new StreamFactory().withCollectionZkHost("collection1", zkServer.getZkAddress())
.withStreamFunction("search", CloudSolrStream.class)
.withStreamFunction("unique", UniqueStream.class)
.withStreamFunction("top", RankStream.class)
.withStreamFunction("group", ReducerStream.class)
.withStreamFunction("parallel", ParallelStream.class);
ParallelStream pstream = (ParallelStream)streamFactory.constructStream("parallel(collection1, group(search(collection1, q=\"*:*\", fl=\"id,a_s,a_i,a_f\", sort=\"a_s asc,a_f asc\", partitionKeys=\"a_s\"), by=\"a_s asc\"), workers=\"2\", zkHost=\""+zkHost+"\", sort=\"a_s asc\")");
由于流表達式依賴于 /export 處理程序,所以使用 /export 的許多字段和字段類型要求也是 /stream 的要求,特別是對于 sort 和 fl 參數(shù)。有關詳細信息,請參閱導出結果集部分。
流源來源于流。最常用的是 search 查詢。
對所有可用源表達式的完整引用在流源引用中可用。
流修飾符包裝其他流函數(shù)或在流上執(zhí)行操作。
Stream Decorator Reference 中提供了對所有可用修飾符表達式的完整引用。
流計算器可以用來計算基于元組中其他值的新值。新計算的值可以放入元組(作為 select(…?) 子句的一部分),用于過濾流(作為 having(…?) 子句的一部分),以及用于其他事情。計算器可以包含字段名稱、原始值或其他計算器,從而使您能夠創(chuàng)建復雜的計算邏輯,包括有條件的 if/then 選項。
如果您想將原始值用作評估的一部分,則需要考慮計算器的解析順序。
如果您希望使用原始字符串作為計算的一部分,則您將需要考慮使用 raw(string) 計算程序。無論輸入什么內(nèi)容,都將始終返回原始值。
Stream Evaluator Reference 中提供了對所有可用計算程序表達式的完整引用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: