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