串流來源參考
search
search
函式搜尋 SolrCloud 集合,並發出符合查詢的元組串流。這非常類似標準的 Solr 查詢,並使用許多相同的參數。
此表達式允許您使用 qt
參數指定請求處理器。預設情況下,使用 /select
處理器。/select
處理器可用於表達式的簡單快速原型製作。但是,對於生產環境,您很可能希望使用 /export
處理器,該處理器旨在 sort
和 export
整個結果集。預設情況下不使用 /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 函式。
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(*)))
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
運算式的度量聚合為單一結果;僅支援count
、min
、max
、sum
和avg
度量。用戶端應用程式可以透過設定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。
cat
cat
函式會讀取指定的檔案或目錄,並將檔案中的每一行做為元組發出。
每個發出的元組都包含兩個欄位:file
和 line
。 file
包含從 userfiles
chroot(直接位於 $SOLR_HOME
下)測量的讀取檔案的路徑,而 line
則包含該檔案中的一行。
cat
非常適合與 update
串流搭配使用,以索引指定文件中的資料,或與 analyze
串流搭配使用,以進一步將行分割成個別權杖,以進行統計處理或視覺化。
cat 參數
-
filePaths
: (必要) 以逗號分隔的檔案路徑列表,用於讀取行。如果指定的路徑是目錄,則會以遞迴方式進行檢索,並讀取所有包含的檔案。為了防止惡意使用者從 Solr 節點讀取任意檔案,filePaths
必須是從執行串流運算式的節點上$SOLR_HOME/userfiles
的 chroot 測量的相對路徑。此目錄必須由使用者建立。 -
maxLines
: (預設為 -1) 要讀取(和發出元組)的最大行數。如果指定負值,則會將指定檔案中的所有行做為元組發出。檔案會按照它們在以逗號分隔的filePaths
引數中出現的順序讀取。如果達到行數限制,則會部分發出或完全不讀取這些後續檔案。
nodes
nodes
函式提供廣度優先圖形遍歷。詳情請參閱圖形遍歷章節。
knnSearch
knnSearch
函式會根據文字相似性傳回文件的 k 個最近鄰居。在底層,knnSearch
函式會使用 More Like This 查詢剖析器外掛程式。
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 都按陣列索引對應到一個詞彙。
random
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) 要視為重要的詞彙的最小長度。
shortestPath
shortestPath
函式是最短路徑圖遍歷的實作。shortestPath
函式會執行通過無權重圖的迭代廣度優先搜尋,以尋找圖中兩個節點之間的最短路徑。shortestPath
函式會為找到的每個路徑發出一個元組。每個發出的元組都將包含一個 path
金鑰,該金鑰指向包含路徑的 nodeID 的 List
。
shortestPath 參數
-
collection
: (必填) 將在其上執行主題查詢的集合。 -
from
: (必填) 開始搜尋的 nodeID -
to
: (必填) 結束搜尋的 nodeID -
edge
: (必填) 語法:from_field=to_field
。from_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 函式。
stats
stats
函式會收集搜尋結果集的簡單彙總。統計函式不支援對儲存區進行彙總,因此統計串流始終傳回具有彙總統計資料的單個元組。在幕後,統計函式會使用 StatsComponent 將統計資料的產生推送到搜尋引擎中。統計函式目前支援以下指標:count(*)
、sum()
、avg()
、min()
和 max()
。
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 函式中指定多次。
train
train
函式會在儲存在 SolrCloud 集合中的訓練集上訓練邏輯回歸文字分類器。它使用平行迭代的批次梯度下降方法來訓練模型。訓練演算法會嵌入在 Solr 內部,因此每次迭代僅會在網路上串流傳輸模型。
train
函數會封裝 features 函數,該函數提供用於訓練模型的詞彙和反向文件頻率 (IDF)。train
函數的操作對象與 features
函數相同的訓練集,其中包括該類別的正向和負向範例。
每次迭代時,train
函數都會發出一個包含模型的元組。模型包含特徵詞彙、權重以及模型的混淆矩陣。然後,可以使用最佳化後的模型根據其特徵詞彙對文件進行分類。
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
可以不同)。