串流來源參考

search 函式搜尋 SolrCloud 集合,並發出符合查詢的元組串流。這非常類似標準的 Solr 查詢,並使用許多相同的參數。

此表達式允許您使用 qt 參數指定請求處理器。預設情況下,使用 /select 處理器。/select 處理器可用於表達式的簡單快速原型製作。但是,對於生產環境,您很可能希望使用 /export 處理器,該處理器旨在 sortexport 整個結果集。預設情況下不使用 /export 處理器,因為它比 /select 處理器有更嚴格的要求,因此不容易開始使用。要了解更多關於 /export 處理器要求的資訊,請檢閱匯出結果集章節。

search 參數

  • collection: (必要) 正在搜尋的集合。

  • q: (必要) 在 Solr 索引上執行的查詢。

  • fl: (必要) 要傳回的欄位列表。

  • sort: (必要) 排序條件。

  • zkHost: 只有在搜尋的集合位於與本機串流處理器不同的 zkHost 中時,才需要定義。只有當使用的 ZkHost 與您連接的 Solr 實例相同時,才會包含 Zookeeper 憑證和 ACL(chroot 可以不同)。

  • qt: 指定要使用的查詢類型或請求處理器。將其設定為 /export 以處理大型結果集。預設值為 /select

  • rows: (使用 /select 處理器時必要) rows 參數指定要傳回多少列。此參數僅在使用 /select 處理器(預設)時才需要,因為 /export 處理器總是會傳回所有列。

  • partitionKeys: 以逗號分隔的鍵列表,用於分割搜尋結果。需與 parallel 函式搭配使用,以在工作節點間平行化操作。詳情請參閱 parallel 函式。

搜尋語法

expr=search(collection1,
       zkHost="localhost:9983",
       qt="/export",
       q="*:*",
       fl="id,a_s,a_i,a_f",
       sort="a_f asc, a_i asc")

drill

drill 函式旨在支援高效能的高基數聚合。 drill 函式會向特定集合中的 export 處理器發送請求,其中包含 export 處理器應用於已排序結果集的串流運算式。然後,export 處理器會發出聚合的元組。 drill 函式會讀取並發出每個分片的聚合元組,並維持排序順序,但不會合併聚合。可以將串流運算式函式包裝在 drill 函式周圍以合併聚合。

drill 參數

  • collection: (必要) 正在搜尋的集合。

  • q: (必要) 在 Solr 索引上執行的查詢。

  • fl: (必要) 要傳回的欄位列表。

  • sort: (必要) 排序條件。

  • expr: 發送至 export 處理器並在已排序結果集上運算的串流運算式。 input() 函式提供來自 export 處理器的已排序元組串流(請參閱以下範例)。

drill 語法

範例 1:基本 drill 語法

drill(articles,
      q="abstract:water",
      fl="author",
      sort="author asc",
      rollup(input(), over="author", count(*)))

範例 2:包裝在 drill 函式周圍的 rollup,用於加總每個分片發出的計數。

rollup(drill(articles,
             q="abstract:water",
             fl="author",
             sort="author asc",
             rollup(input(), over="author", count(*))),
       over="author",
       sum(count(*)))

echo

echo 函式會傳回一個單一元組,其中回顯其 text 參數。Echo 是最簡單的串流來源,旨在為文字分析串流裝飾器提供文字。

echo 語法

echo("Hello world")

facet

facet 函式提供在 Bucket 上彙總的聚合。在底層,facet 函式會使用 Solr 的 JSON Facet API 將聚合下推到搜尋引擎中。這為許多使用案例提供了次秒級的效能。 facet 函式適用於 Bucket 欄位中具有少量至中等數量不同值的案例。若要支援高基數聚合,請參閱 rollup 函式。

facet 參數

  • collection: (必要) 將聚合 Facet 的集合。

  • q: (必要) 用於建立聚合的查詢。

  • buckets: (必要) 以逗號分隔的欄位列表,用於執行彙總。以逗號分隔的列表表示多維彙總中的維度。

  • bucketSorts: (必要) 以逗號分隔的排序列表,用於套用至 buckets 參數中的每個維度。排序可以基於計算的度量或 Bucket 值。

  • rows: (預設值 10) 要傳回的列數。 '-1' 會傳回所有列。

  • offset: (預設值 0) 從結果集中開始的偏移量。

  • overfetch: (預設值 150) 過度提取用於在高基數欄位上提供精確的聚合。

  • method: JSON Facet API 聚合方法。

  • bucketSizeLimit: 設定要提取的絕對列數。這與 rows、offset 和 overfetch 不相容。此值會套用至每個維度。 '-1' 將會提取所有 Bucket。

  • metrics: 要為 Bucket 計算的度量列表。目前支援的度量為 sum(col)avg(col)min(col)max(col)count(*)countDist(col)std(col)per(col, 50)per 度量會計算數值欄位的百分位數,並且可以在同一個 facet 函式中指定多次。

  • tiered: (預設值 true) 控制 facet 串流是否應使用 plist 運算式平行化對多個 Solr 集合的 JSON Facet 請求的旗標;此選項僅在 collection 是由多個集合支援的別名時適用。如果啟用 tiered,則會在內部使用 rollup 運算式將多個 facet 運算式的度量聚合為單一結果;僅支援 countminmaxsumavg 度量。用戶端應用程式可以透過設定 solr.facet.stream.tiered=false 系統屬性來全域停用此功能。

facet 語法

範例 1

facet(collection1,
      q="*:*",
      buckets="a_s",
      bucketSorts="sum(a_i) desc",
      rows=100,
      sum(a_i),
      sum(a_f),
      min(a_i),
      min(a_f),
      max(a_i),
      max(a_f),
      avg(a_i),
      avg(a_f),
      std(a_f),
      per(a_f, 50),
      per(a_f, 75),
      count(*))

以上範例顯示了一個 facet 函式,該函式對單一 Bucket 執行彙總,其中 Bucket 會按照 sum(a_i) 度量的計算值以遞減順序傳回。

範例 2

facet(collection1,
      q="*:*",
      buckets="year_i, month_i, day_i",
      bucketSorts="year_i desc, month_i desc, day_i desc",
      rows=10,
      offset=20,
      sum(a_i),
      sum(a_f),
      min(a_i),
      min(a_f),
      max(a_i),
      max(a_f),
      avg(a_i),
      avg(a_f),
      std(a_f),
      per(a_f, 50),
      per(a_f, 75),
      count(*))

以上範例顯示了一個 facet 函式,該函式對三個 Bucket 執行彙總,其中 Bucket 會按照 Bucket 值以遞減順序傳回。 rows 參數會傳回 10 列,而 offset 參數則會從第 20 列開始傳回列。

features

features 函式會從儲存在 SolrCloud 集合中的分類訓練集中提取關鍵詞。它使用一種稱為「資訊增益」的演算法,從訓練集中選取重要的詞彙。 features 函式專門設計用於與 train 函式搭配使用,後者會使用提取的特徵來訓練文字分類器。

features 函式旨在與提供類別正面和負面範例的訓練集搭配使用。它會為每個提取的特徵詞彙發出一個元組,以及該詞彙在訓練集中的反向文件頻率 (IDF)。

features 函式使用查詢從集合中選取訓練集。每個選取特徵的 IDF 是相對於符合查詢的訓練集計算的。這允許在同一個 SolrCloud 集合中儲存多個訓練集,而不會污染跨訓練集的 IDF。

features 參數

  • collection: (必要) 保存訓練集的集合

  • q: (必要) 定義訓練集的查詢。特徵的 IDF 將針對符合查詢的結果集生成。

  • featureSet: (必要) 特徵集的名稱。如果特徵儲存在 SolrCloud 集合中,則可以使用此名稱來擷取特徵。

  • field: (必要) 從中提取特徵的文字欄位。

  • outcome: (必要) 定義類別(正面或負面)的欄位。

  • numTerms: (必要) 要提取的特徵詞彙數量。

  • positiveLabel: (預設為 1) 定義正面結果的 outcome 欄位中的值。

features 語法

features(collection1,
         q="*:*",
         featureSet="features1",
         field="body",
         outcome="out_i",
         numTerms=250)

cat

cat 函式會讀取指定的檔案或目錄,並將檔案中的每一行做為元組發出。

每個發出的元組都包含兩個欄位:filelinefile 包含從 userfiles chroot(直接位於 $SOLR_HOME 下)測量的讀取檔案的路徑,而 line 則包含該檔案中的一行。

cat 非常適合與 update 串流搭配使用,以索引指定文件中的資料,或與 analyze 串流搭配使用,以進一步將行分割成個別權杖,以進行統計處理或視覺化。

cat 參數

  • filePaths: (必要) 以逗號分隔的檔案路徑列表,用於讀取行。如果指定的路徑是目錄,則會以遞迴方式進行檢索,並讀取所有包含的檔案。為了防止惡意使用者從 Solr 節點讀取任意檔案,filePaths 必須是從執行串流運算式的節點上 $SOLR_HOME/userfiles 的 chroot 測量的相對路徑。此目錄必須由使用者建立。

  • maxLines: (預設為 -1) 要讀取(和發出元組)的最大行數。如果指定負值,則會將指定檔案中的所有行做為元組發出。檔案會按照它們在以逗號分隔的 filePaths 引數中出現的順序讀取。如果達到行數限制,則會部分發出或完全不讀取這些後續檔案。

cat 範例

以下範例會發出位於 $SOLR_HOME/userfiles/authors.txt 的單一文字檔案中的所有行

cat("authors.txt")

此範例會讀取 $SOLR_HOME/userfiles/authors.txt 中的行,以及在 $SOLR_HOME/userfiles/fiction/scifi 下找到的所有檔案(以遞迴方式)。只會發出 500 行,這表示某些檔案可能會被部分發出或完全不讀取

cat("authors.txt,fiction/scifi/", maxLines=500)

nodes

nodes 函式提供廣度優先圖形遍歷。詳情請參閱圖形遍歷章節。

knnSearch

knnSearch 函式會根據文字相似性傳回文件的 k 個最近鄰居。在底層,knnSearch 函式會使用 More Like This 查詢剖析器外掛程式。

knnSearch 參數

  • collection: (必要) 要在其中執行搜尋的集合。

  • id: (必要) 從中開始 knn 搜尋的來源文件的 ID。

  • qf: (必要) 用於比較文件的查詢欄位。

  • k: (必要) 要傳回的最近鄰居數目。

  • fl: (必要) 要傳回的欄位清單。

  • mindf: (選用,預設值為 5) 語料庫中要包含在搜尋中的最少出現次數。

  • maxdf: (選用) 語料庫中要包含在搜尋中的最多出現次數。

  • minwl: (選用) 要包含在搜尋中的最小詞彙長度。

  • maxwl: (選用) 要包含在搜尋中的最大詞彙長度。

knnSearch 語法

knnSearch(collection1,
          id="doc1",
          qf="text_field",
          k="10",
          fl="id, title",
          mintf="3",
          maxdf="10000000")

model

api 函式會擷取並快取儲存在 SolrCloud 集合中的邏輯迴歸文字分類模型。 api 函式旨在與由 train 函式建立的模型搭配使用,但只要它們符合指定的格式,也可以用於擷取在 Solr 外部訓練的文字分類模型。擷取模型後,classify 函式可以使用該模型來對文件進行分類。

系統會根據 id 參數擷取並傳回單一模型元組。透過將 id 參數與索引中的模型名稱比對來擷取模型。如果索引中儲存了多個相同名稱模型的迭代,則會選取最高的迭代。

使用模型快取

api 函式具有內部 LRU(最近最少使用)快取,因此無需在每次調用 api 函式時都檢索模型。每個模型 ID 的快取時間可以作為參數傳遞給函式調用。檢索快取模型不會重置快取中模型 ID 的過期時間。

模型儲存

Solr 中模型的儲存格式如下。train 函式會輸出以下格式,因此如果您計劃將 api 函式與在 Solr 之外訓練的邏輯回歸模型一起使用,您才需要了解綱要詳細資訊。

  • name_s (單一值,字串,已儲存):模型的名稱。

  • iteration_i (單一值,整數,已儲存):模型的迭代次數。Solr 可以儲存 train 函式產生的模型的所有迭代。

  • terms_ss (多個值,字串,已儲存):模型的詞彙/特徵陣列。

  • weights_ds (多個值,雙精度浮點數,已儲存):詞彙權重陣列。每個權重都按陣列索引對應到一個詞彙。

  • idfs_ds (多個值,雙精度浮點數,已儲存):詞彙 IDF(反向文件頻率)陣列。每個 IDF 都按陣列索引對應到一個詞彙。

模型參數

  • collection: (必填) 儲存模型的集合。

  • id: (必填) 模型的 ID/名稱。模型函式總是傳回一個模型。如果名稱有多個迭代,則會傳回最高的迭代。

  • cacheMillis: (選填) 將模型快取在 LRU 快取中的時間量。

模型語法

model(modelCollection,
      id="myModel"
      cacheMillis="200000")

random

random 函式會搜尋 SolrCloud 集合並發出符合查詢的虛擬隨機結果集。每次調用 random 都會傳回不同的虛擬隨機結果集。

random 參數

  • collection: (必填) 將從中彙總統計資料的集合。

  • q: (必要) 用於建立聚合的查詢。

  • rows: (必填) 要傳回的虛擬隨機結果數。

  • fl: (必填) 要傳回的欄位列表。

  • fq: (選填) 篩選查詢

random 語法

random(baskets,
       q="productID:productX",
       rows="100",
       fl="basketID")

在上面的範例中,random 函式會搜尋 baskets 集合中所有「productID:productX」的列。它將傳回 100 個虛擬隨機結果。傳回的欄位列表為 basketID。

significantTerms

significantTerms 函式會查詢 SolrCloud 集合,但它不是傳回文件,而是傳回在結果集中文件中找到的重要詞彙。significantTerms 函式會根據詞彙在結果集中出現的頻率以及它們在整個語料庫中出現的頻率來對詞彙評分。significantTerms 函式會為每個詞彙發出一個元組,其中包含詞彙、分數、前景計數和背景計數。前景計數是詞彙出現在結果集中的文件數。背景計數是詞彙出現在整個語料庫中的文件數。前景和背景計數是集合的全域計數。

significantTerms 參數

  • collection: (必填) 函式在其上執行的集合。

  • q: (必填) 描述前景文件集的查詢。

  • field: (必填) 要從中提取詞彙的欄位。

  • limit: (選填,預設值 20) 要傳回的最大詞彙數。

  • minDocFreq: (選填,預設值為 5 個文件) 詞彙在分片上必須出現的最小文件數。這是一個浮點值。如果大於 1.0,則將其視為文件的絕對數。如果小於 1.0,則將其視為文件的百分比。

  • maxDocFreq: (選填,預設值為 30% 的文件) 詞彙在分片上可以出現的最大文件數。這是一個浮點值。如果大於 1.0,則將其視為文件的絕對數。如果小於 1.0,則將其視為文件的百分比。

  • minTermLength: (選填,預設值為 4) 要視為重要的詞彙的最小長度。

significantTerms 語法

significantTerms(collection1,
                 q="body:Solr",
                 field="author",
                 limit="50",
                 minDocFreq="10",
                 maxDocFreq=".20",
                 minTermLength="5")

在上面的範例中,significantTerms 函式正在查詢 collection1,並從 authors 欄位傳回最多 50 個重要詞彙,這些詞彙出現在 10 個或更多文件中,但不超過語料庫的 20%。

shortestPath

shortestPath 函式是最短路徑圖遍歷的實作。shortestPath 函式會執行通過無權重圖的迭代廣度優先搜尋,以尋找圖中兩個節點之間的最短路徑。shortestPath 函式會為找到的每個路徑發出一個元組。每個發出的元組都將包含一個 path 金鑰,該金鑰指向包含路徑的 nodeID 的 List

shortestPath 參數

  • collection: (必填) 將在其上執行主題查詢的集合。

  • from: (必填) 開始搜尋的 nodeID

  • to: (必填) 結束搜尋的 nodeID

  • edge: (必填) 語法:from_field=to_fieldfrom_field 定義要從哪個欄位搜尋。to_field 定義要搜尋到哪個欄位。有關詳細說明,請參閱下面的範例。

  • threads: (選填:預設值 6) 用於執行遍歷中分割聯結的執行緒數。

  • partitionSize: (選填:預設值 250) 聯結的每個分割區中的節點數。

  • fq: (選填) 篩選查詢

  • maxDepth: (必填) 將搜尋限制為圖中的最大深度。

shortestPath 語法

shortestPath(collection,
             from="john@company.com",
             to="jane@company.com",
             edge="from_address=to_address",
             threads="6",
             partitionSize="300",
             fq="limiting query",
             maxDepth="4")

上面的運算式執行廣度優先搜尋,以尋找無權重、有向圖中的最短路徑。

搜尋從 from_address 欄位中的 nodeID「john@company.com」開始,並在 to_address 欄位中搜尋 nodeID「jane@company.com」。此搜尋會以迭代方式執行,直到達到 maxDepth 為止。遍歷中的每個層級都是作為整個集合的平行分割巢狀迴圈聯結來實作。threads 參數控制每個層級執行聯結的執行緒數,而 partitionSize 參數控制每個聯結分割區中的節點數。maxDepth 參數控制要遍歷的層級數。fq 是應用於遍歷中每個層級的限制查詢。

shuffle

shuffle 運算式會排序和匯出整個結果集。shuffle 運算式與 search 運算式類似,只是在幕後 shuffle 始終使用 /export 處理常式。shuffle 運算式旨在與需要完整、排序結果集的關聯代數裝飾器結合使用。使用平行串流裝飾器,可以在工作節點之間分割混洗的結果集,以執行平行的關聯代數。在平行模式下使用時,必須提供 partitionKeys 參數。

shuffle 參數

  • collection: (必要) 正在搜尋的集合。

  • q: (必要) 在 Solr 索引上執行的查詢。

  • fl: (必要) 要傳回的欄位列表。

  • sort: (必要) 排序條件。

  • zkHost: 只有在搜尋的集合位於與本機串流處理器不同的 zkHost 中時,才需要定義。只有當使用的 ZkHost 與您連接的 Solr 實例相同時,才會包含 Zookeeper 憑證和 ACL(chroot 可以不同)。

  • partitionKeys: 以逗號分隔的鍵列表,用於分割搜尋結果。需與 parallel 函式搭配使用,以在工作節點間平行化操作。詳情請參閱 parallel 函式。

shuffle 語法

shuffle(collection1,
        q="*:*",
        fl="id,a_s,a_i,a_f",
        sort="a_f asc, a_i asc")

stats

stats 函式會收集搜尋結果集的簡單彙總。統計函式不支援對儲存區進行彙總,因此統計串流始終傳回具有彙總統計資料的單個元組。在幕後,統計函式會使用 StatsComponent 將統計資料的產生推送到搜尋引擎中。統計函式目前支援以下指標:count(*)sum()avg()min()max()

stats 參數

  • collection: (必填) 將從中彙總統計資料的集合。

  • q: (必要) 用於建立聚合的查詢。

  • metrics: (必填) 要包含在結果元組中的指標。目前支援的指標為 sum(col)avg(col)min(col)max(col)count(*)countDist(col)std(col)per(col, 50)per 指標會計算數值欄位的百分位數,而且可以在同一個統計函式中指定多次。

stats 語法

stats(collection1,
      q=*:*,
      sum(a_i),
      sum(a_f),
      min(a_i),
      min(a_f),
      max(a_i),
      max(a_f),
      avg(a_i),
      avg(a_f),
      std(a_f),
      per(a_f, 50),
      per(a_f, 75),
      count(*))

timeseries

timeseries 函式會建立時間序列彙總。在幕後,timeseries 函式使用 JSON Facet API 作為其高效能彙總引擎。

timeseries 參數

  • collection: (必填) 將從中彙總統計資料的集合。

  • q: (必要) 用於建立聚合的查詢。

  • field: (必填) 時間序列的日期欄位。

  • split: (選填) 字串欄位。會為欄位中的每個值產生不同的時間線。

  • limit: (選填) 每個時間儲存區中分割欄位中的值數限制。分割值會依第一個指標以降序排列。

  • start: (必填) 以 Solr 日期或日期數學語法表示的時間序列開始時間。

  • end: (必填) 以 Solr 日期或日期數學語法表示的時間序列結束時間。

  • gap: (必填) 以 Solr 日期數學語法表示的時間序列彙總點之間的時間間隔。

  • format: (選填) 日期範本,用於格式化輸出元組中的日期欄位。格式化由 Java 的 SimpleDateFormat 類別執行。

  • metrics: (必填) 要包含在結果元組中的指標。目前支援的指標為 sum(col)avg(col)min(col)max(col)count(*)countDist(col)std(col)per(col, 50)per 指標會計算數值欄位的百分位數,而且可以在同一個 timeseries 函式中指定多次。

timeseries 語法

timeseries(collection1,
           q=*:*,
           field="rec_dt",
           split="customer_s",
           limit="5",
           start="NOW-30DAYS",
           end="NOW",
           gap="+1DAY",
           format="YYYY-MM-dd",
           sum(a_i),
           max(a_i),
           max(a_f),
           avg(a_i),
           avg(a_f),
           std(a_f),
           per(a_f, 50),
           per(a_f, 75),
           count(*))

train

train 函式會在儲存在 SolrCloud 集合中的訓練集上訓練邏輯回歸文字分類器。它使用平行迭代的批次梯度下降方法來訓練模型。訓練演算法會嵌入在 Solr 內部,因此每次迭代僅會在網路上串流傳輸模型。

train 函數會封裝 features 函數,該函數提供用於訓練模型的詞彙和反向文件頻率 (IDF)。train 函數的操作對象與 features 函數相同的訓練集,其中包括該類別的正向和負向範例。

每次迭代時,train 函數都會發出一個包含模型的元組。模型包含特徵詞彙、權重以及模型的混淆矩陣。然後,可以使用最佳化後的模型根據其特徵詞彙對文件進行分類。

train 參數

  • collection:(必要)包含訓練集的集合。

  • q:(必要)定義訓練集的查詢。將根據此查詢生成特徵的 IDF。

  • name:(必要)模型的名稱。如果模型儲存在 SolrCloud 集合中,可以使用此名稱檢索模型。

  • field: (必要) 從中提取特徵的文字欄位。

  • outcome: (必要) 定義類別(正面或負面)的欄位。

  • maxIterations:(必要)執行訓練迭代的次數。

  • positiveLabel:(預設為 1)結果欄位中定義正向結果的值。

train 語法

train(collection1,
      features(collection1, q="*:*", featureSet="first", field="body", outcome="out_i", numTerms=250),
      q="*:*",
      name="model1",
      field="body",
      outcome="out_i",
      maxIterations=100)

topic

topic 函數提供基於 SolrCloud 建構的發佈/訂閱訊息傳遞功能。topic 函數允許使用者訂閱查詢。然後,該函數會針對符合主題查詢的新增或更新文件提供一次性傳遞。對 topic 函數的初始呼叫會為特定主題 ID 建立檢查點。後續對相同主題 ID 的呼叫將會傳回在初始檢查點之後新增或更新的文件。每次執行主題查詢都會更新主題 ID 的檢查點。將 initialCheckpoint 參數設定為 0 會導致主題處理索引中所有符合主題查詢的文件。

SOLR-8709 提交並發佈之前,topic 函數應視為 Beta 版本。

topic 參數

  • checkpointCollection:(必要)儲存主題檢查點的集合。

  • collection: (必填) 將在其上執行主題查詢的集合。

  • id:(必要)主題的唯一 ID。檢查點將儲存在此 ID 下。

  • q:(必要)主題查詢。

  • fl:(必要)topic 函數傳回的欄位清單。

  • initialCheckpoint:(選用)設定開始從佇列讀取的初始 Solr _version_ 編號。如果未設定,則預設為索引中的最高版本。設定為 0 會處理索引中符合查詢的所有記錄。

  • zkHost:(選用)只有在要搜尋的集合在與本機串流處理常式不同的 zkHost 中找到時,才需要定義。只有在使用與您連線的 Solr 執行個體相同的 ZkHost 時,才會包含 Zookeeper 認證和 ACL(chroot 可以不同)。

topic 語法

topic(checkpointCollection,
      collection,
      id="uniqueId",
      q="topic query",
      fl="id, name, country")

tuple

tuple 函數會發出一個包含名稱/值配對的單一元組。這些值可以設定為 let 運算式中指派的變數、常值、串流求值器或串流運算式。若是串流求值器,元組會輸出求值器的傳回值。這可以是數值、清單或對應。如果某個值設定為串流運算式,則 tuple 函數會將串流運算式中的元組串流攤平為元組清單。

tuple 參數

  • 名稱=值 配對

tuple 語法

tuple(a=add(1,1),
      b=search(collection1, q="cat:a", fl="a, b, c", sort="a desc"))