国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

Solr:流表達式

2018-12-06 10:38 更新

流表達式為 Solr Cloud 提供了一種簡單而強大的流處理語言。

流式表達式是一組可以組合起來執(zhí)行許多不同的并行計算任務的函數(shù)。這些函數(shù)是并行 SQL 接口的基礎。

有越來越多的函數(shù)庫可以結合起來實現(xiàn):

  • 請求/響應流處理
  • 批量流處理
  • 快速交互式 MapReduce
  • 聚合(兩者都推下了分面和洗牌的 MapReduce)
  • 并行關系代數(shù)(分布式連接,交集,聯(lián)合,互補)
  • 發(fā)布/訂閱消息
  • 分布圖遍歷
  • 機器學習和并行迭代模型訓練
  • 異常檢測
  • 推薦系統(tǒng)
  • 檢索和排序服務
  • 文本分類和特征提取
  • 流式 NLP
  • 統(tǒng)計編程

來自外部系統(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\")");

數(shù)據(jù)要求

由于流表達式依賴于 /export 處理程序,所以使用 /export 的許多字段和字段類型要求也是 /stream 的要求,特別是對于 sort 和 fl 參數(shù)。有關詳細信息,請參閱導出結果集部分。

流表達式的類型

關于流源

流源來源于流。最常用的是 search 查詢。

對所有可用源表達式的完整引用在流源引用中可用。

關于流修飾符

流修飾符包裝其他流函數(shù)或在流上執(zhí)行操作。

Stream Decorator Reference 中提供了對所有可用修飾符表達式的完整引用。

關于 Stream 評估器

流計算器可以用來計算基于元組中其他值的新值。新計算的值可以放入元組(作為 select(…?) 子句的一部分),用于過濾流(作為 having(…?) 子句的一部分),以及用于其他事情。計算器可以包含字段名稱、原始值或其他計算器,從而使您能夠創(chuàng)建復雜的計算邏輯,包括有條件的 if/then 選項。

如果您想將原始值用作評估的一部分,則需要考慮計算器的解析順序。

  1. 如果參數(shù)可以被解析成一個有效的數(shù)字,那么它被認為是一個數(shù)字。例如,add(3,4.5)
  2. 如果參數(shù)可以被解析成一個有效的布爾值,那么它被認為是一個布爾值。例如,eq(true,false)
  3. 如果參數(shù)可以被分析成有效的計算器,那么它被認為是一個計算器。例如,eq(add(10,4),add(7,7))
  4. 即使引用了該參數(shù),也會將其視為字段名稱。例如,eq(fieldA,"fieldB")

如果您希望使用原始字符串作為計算的一部分,則您將需要考慮使用 raw(string) 計算程序。無論輸入什么內(nèi)容,都將始終返回原始值。

Stream Evaluator Reference 中提供了對所有可用計算程序表達式的完整引用。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號