結構描述 API
結構描述 API 允許您使用 HTTP API 來管理結構描述的許多元素。
此 API 提供對每個集合(或在未執行 SolrCloud 時為核心)的 Solr 結構描述的讀取和寫入存取權限。支援讀取所有結構描述元素。可以新增、移除或取代欄位、動態欄位、欄位類型和 copyField 規則。未來的 Solr 版本將擴展寫入存取權限,以允許修改更多結構描述元素。
結構描述 API 使用 ManagedIndexSchemaFactory
類別,這是現代 Solr 版本中的預設結構描述工廠。請參閱 結構描述工廠設定 一節,以取得有關為索引選擇結構描述工廠的詳細資訊。
不建議手動編輯受管理的結構描述
範例設定中的名為「managed-schema.xml」的檔案可能包含一個說明,建議永遠不要手動編輯該檔案。在結構描述 API 存在之前,這類編輯是變更結構描述的唯一方法,而使用者可能強烈希望繼續以這種方式進行變更。 不建議這樣做的原因是,如果稍後使用此處描述的結構描述 API 進行變更,則結構描述的手動編輯可能會遺失,除非在使用結構描述 API 之前重新載入核心或集合,或重新啟動 Solr。如果謹慎地在手動編輯後始終重新載入或重新啟動,則進行這些編輯完全沒有問題。 在 Solr 9 之前,此 xml 檔案稱為 |
此 API 允許所有呼叫使用兩種輸出模式:JSON 或 XML。在請求完整結構描述時,還有另一種輸出模式,它是以 XML 建模,模擬 managed-schema.xml 檔案本身,後者為 XML 格式。
使用 API 修改結構描述時,將自動發生核心重新載入,以便之後索引的文件可立即使用變更。先前索引的文件將不會自動更新 - 如果現有索引資料使用您變更的結構描述元素,則必須重新索引這些文件。
結構描述修改後重新索引!
如果您修改結構描述,您可能需要重新索引所有文件。如果您不這樣做,您可能會失去對文件的存取權限,或無法正確解譯它們,例如,在取代欄位類型之後。 修改結構描述永遠不會修改任何已索引的文件。您必須重新索引文件,才能將結構描述變更套用至它們。在變更後進行的查詢和更新可能會遇到之前不存在的錯誤。完全刪除索引並重新建立通常是修復此類錯誤的唯一選項。 請參閱 重新索引 一節,以取得有關重新索引的詳細資訊。 |
本節中的所有範例都假設您正在執行「techproducts」Solr 範例
bin/solr start -e techproducts
修改結構描述
若要新增、移除或取代欄位、動態欄位規則、複製欄位規則或新的欄位類型,您可以將 POST 請求傳送至 /schema/
端點,其中包含 JSON 格式的一系列命令,以執行要求的動作。支援下列命令
-
add-field
:新增具有您提供的參數的新欄位。 -
delete-field
:刪除欄位。 -
replace-field
:使用不同的設定取代現有欄位。 -
add-dynamic-field
:新增具有您提供的參數的新動態欄位規則。 -
delete-dynamic-field
:刪除動態欄位規則。 -
replace-dynamic-field
:使用不同的設定取代現有的動態欄位規則。 -
add-field-type
:新增具有您提供的參數的新欄位類型。 -
delete-field-type
:刪除欄位類型。 -
replace-field-type
:使用不同的設定取代現有欄位類型。 -
add-copy-field
:新增新的複製欄位規則。 -
delete-copy-field
:刪除複製欄位規則。
這些指令可以透過個別的 POST 請求發出,也可以在同一個 POST 請求中發出。指令會依照它們被指定的順序執行。
在每種情況下,回應都會包含狀態和處理請求所需的時間,但不會包含完整的綱要。
當使用 API 修改綱要時,會自動進行核心重新載入,以便讓變更立即對之後建立索引的文件生效。先前已建立索引的文件將不會自動處理 - 如果這些文件使用了您變更的綱要元素,則必須重新建立索引。
新增欄位
add-field
指令會將新的欄位定義新增至您的綱要。如果已存在同名的欄位,則會擲回錯誤。
所有在手動編輯綱要時可用的屬性,都可以透過 API 傳遞。這些請求屬性在「欄位」章節中有詳細說明。
例如,要定義一個名為 "sell_by"、類型為 "pdate" 的新儲存欄位,您會發出以下的 POST 請求
-
V1 API
-
V2 API
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-field":{
"name":"sell_by",
"type":"pdate",
"stored":true }
}' https://127.0.0.1:8983/solr/techproducts/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-field":{
"name":"sell_by",
"type":"pdate",
"stored":true }
}' https://127.0.0.1:8983/api/collections/techproducts/schema
刪除欄位
delete-field
指令會從您的綱要中移除欄位定義。如果該欄位不存在於綱要中,或者如果該欄位是複製欄位規則的來源或目的地,則會擲回錯誤。
例如,要刪除名為 "sell_by" 的欄位,您會發出以下的 POST 請求
-
V1 API
-
V2 API
curl -X POST -H 'Content-type:application/json' --data-binary '{
"delete-field" : { "name":"sell_by" }
}' https://127.0.0.1:8983/solr/techproducts/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{
"delete-field" : { "name":"sell_by" }
}' https://127.0.0.1:8983/api/collections/techproducts/schema
取代欄位
replace-field
指令會取代欄位的定義。請注意,您必須提供欄位的完整定義 - 這個指令不會部分修改欄位的定義。如果該欄位不存在於綱要中,則會擲回錯誤。
所有在手動編輯綱要時可用的屬性,都可以透過 API 傳遞。這些請求屬性在「欄位」章節中有詳細說明。
例如,要取代現有欄位 "sell_by" 的定義,使其類型為 "date" 且不儲存,您會發出以下的 POST 請求
-
V1 API
-
V2 API
curl -X POST -H 'Content-type:application/json' --data-binary '{
"replace-field":{
"name":"sell_by",
"type":"date",
"stored":false }
}' https://127.0.0.1:8983/solr/techproducts/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{
"replace-field":{
"name":"sell_by",
"type":"date",
"stored":false }
}' https://127.0.0.1:8983/api/collections/techproducts/schema
新增動態欄位規則
add-dynamic-field
指令會將新的動態欄位規則新增至您的綱要。
所有在編輯綱要時可用的屬性,都可以透過 POST 請求傳遞。「動態欄位」章節詳細說明了可以為動態欄位規則定義的所有屬性。
例如,要建立一個新的動態欄位規則,其中所有以 "_s" 結尾的傳入欄位都會被儲存,並且具有 "string" 的欄位類型,您可以發出如下的 POST 請求
-
V1 API
-
V2 API
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-dynamic-field":{
"name":"*_s",
"type":"string",
"stored":true }
}' https://127.0.0.1:8983/solr/techproducts/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-dynamic-field":{
"name":"*_s",
"type":"string",
"stored":true }
}' https://127.0.0.1:8983/api/collections/techproducts/schema
刪除動態欄位規則
delete-dynamic-field
指令會從您的綱要中刪除動態欄位規則。如果該動態欄位規則不存在於綱要中,或者如果綱要包含一個其目標或目的地僅符合此動態欄位規則的複製欄位規則,則會擲回錯誤。
例如,要刪除符合 "*_s" 的動態欄位規則,您可以發出如下的 POST 請求
-
V1 API
-
V2 API
curl -X POST -H 'Content-type:application/json' --data-binary '{
"delete-dynamic-field":{ "name":"*_s" }
}' https://127.0.0.1:8983/solr/techproducts/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{
"delete-dynamic-field":{ "name":"*_s" }
}' https://127.0.0.1:8983/api/collections/techproducts/schema
取代動態欄位規則
replace-dynamic-field
指令會取代您綱要中的動態欄位規則。請注意,您必須提供動態欄位規則的完整定義 - 這個指令不會部分修改動態欄位規則的定義。如果該動態欄位規則不存在於綱要中,則會擲回錯誤。
所有在編輯綱要時可用的屬性,都可以透過 POST 請求傳遞。「動態欄位」章節詳細說明了可以為動態欄位規則定義的所有屬性。
例如,要將 "*_s" 動態欄位規則的定義取代為欄位類型為 "text_general" 且不儲存的規則,您可以發出如下的 POST 請求
-
V1 API
-
V2 API
curl -X POST -H 'Content-type:application/json' --data-binary '{
"replace-dynamic-field":{
"name":"*_s",
"type":"text_general",
"stored":false }
}' https://127.0.0.1:8983/solr/techproducts/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{
"replace-dynamic-field":{
"name":"*_s",
"type":"text_general",
"stored":false }
}' https://127.0.0.1:8983/solr/techproducts/schema
新增欄位類型
add-field-type
指令會將新的欄位類型新增至您的綱要。
所有在手動編輯綱要時可用的欄位類型屬性,都可以在 POST 請求中使用。指令的結構是標準欄位類型定義的 JSON 對應,包括名稱、類別、索引和查詢分析器定義等。「欄位類型定義和屬性」章節說明了所有可用選項的詳細資訊。
例如,要建立一個名為 "myNewTxtField" 的新欄位類型,您可以發出如下的 POST 請求
-
具有單一分析的 V1 API
-
具有兩個分析器的 V1 API
-
具有兩個分析器的 V2 API
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-field-type" : {
"name":"myNewTxtField",
"class":"solr.TextField",
"positionIncrementGap":"100",
"analyzer" : {
"charFilters":[{
"name":"patternReplace",
"replacement":"$1$1",
"pattern":"([a-zA-Z])\\\\1+" }],
"tokenizer":{
"name":"whitespace" },
"filters":[{
"name":"wordDelimiter",
"preserveOriginal":"0" }]}}
}' https://127.0.0.1:8983/solr/techproducts/schema
請注意,在此範例中,我們只定義了一個單一分析器區段,它將適用於索引分析和查詢分析。
如果我們想要定義個別的分析,我們會將上述範例中的 analyzer
區段替換為 indexAnalyzer
和 queryAnalyzer
的個別區段。如下範例所示
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-field-type":{
"name":"myNewTextField",
"class":"solr.TextField",
"indexAnalyzer":{
"tokenizer":{
"name":"pathHierarchy",
"delimiter":"/" }},
"queryAnalyzer":{
"tokenizer":{
"name":"keyword" }}}
}' https://127.0.0.1:8983/solr/techproducts/schema
要使用 V2 API 定義兩個分析器,我們只需使用不同的端點
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-field-type":{
"name":"myNewTextField",
"class":"solr.TextField",
"indexAnalyzer":{
"tokenizer":{
"name":"pathHierarchy",
"delimiter":"/" }},
"queryAnalyzer":{
"tokenizer":{
"name":"keyword" }}}
}' https://127.0.0.1:8983/api/collections/techproducts/schema
刪除欄位類型
delete-field-type
指令會從您的綱要中移除欄位類型。如果該欄位類型不存在於綱要中,或者如果綱要中的任何欄位或動態欄位規則使用了該欄位類型,則會擲回錯誤。
例如,要刪除名為 "myNewTxtField" 的欄位類型,您可以發出如下的 POST 請求
-
V1 API
-
V2 API
curl -X POST -H 'Content-type:application/json' --data-binary '{
"delete-field-type":{ "name":"myNewTxtField" }
}' https://127.0.0.1:8983/solr/techproducts/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{
"delete-field-type":{ "name":"myNewTxtField" }
}' https://127.0.0.1:8983/api/collections/techproducts/schema
取代欄位類型
replace-field-type
指令會取代您綱要中的欄位類型。請注意,您必須提供欄位類型的完整定義 - 這個指令不會部分修改欄位類型的定義。如果該欄位類型不存在於綱要中,則會擲回錯誤。
所有在手動編輯綱要時可用的欄位類型屬性,都可以在 POST 請求中使用。指令的結構是標準欄位類型定義的 JSON 對應,包括名稱、類別、索引和查詢分析器定義等。「欄位類型定義和屬性」章節說明了所有可用選項的詳細資訊。
例如,要取代名為 "myNewTxtField" 的欄位類型的定義,您可以發出如下的 POST 請求
-
V1 API
-
V2 API
curl -X POST -H 'Content-type:application/json' --data-binary '{
"replace-field-type":{
"name":"myNewTxtField",
"class":"solr.TextField",
"positionIncrementGap":"100",
"analyzer":{
"tokenizer":{
"name":"standard" }}}
}' https://127.0.0.1:8983/solr/techproducts/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{
"replace-field-type":{
"name":"myNewTxtField",
"class":"solr.TextField",
"positionIncrementGap":"100",
"analyzer":{
"tokenizer":{
"name":"standard" }}}
}' https://127.0.0.1:8983/api/collections/techproducts/schema
新增複製欄位規則
add-copy-field
指令會將新的複製欄位規則新增至您的綱要。
此指令支援的屬性與手動編輯綱要建立複製欄位規則時相同,如下所示
source
-
必填
預設值:無
來源欄位。
dest
-
必填
預設值:無
要將來源欄位複製到的欄位或欄位陣列。
maxChars
-
選填
預設值:無
要複製的字元數上限。「複製欄位」章節有更多詳細資訊。
例如,要定義一個規則將 "shelf" 欄位複製到 "location" 和 "catchall" 欄位,您會發出以下的 POST 請求
-
V1 API
-
V2 API
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-copy-field":{
"source":"shelf",
"dest":[ "location", "catchall" ]}
}' https://127.0.0.1:8983/solr/techproducts/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-copy-field":{
"source":"shelf",
"dest":[ "location", "catchall" ]}
}' https://127.0.0.1:8983/api/collections/techproducts/schema
刪除複製欄位規則
delete-copy-field
指令會從您的綱要中刪除複製欄位規則。如果該複製欄位規則不存在於綱要中,則會擲回錯誤。
此指令需要 source
和 dest
屬性。
例如,要刪除一個將 "shelf" 欄位複製到 "location" 欄位的規則,您會發出以下的 POST 請求
-
V1 API
-
V2 API
curl -X POST -H 'Content-type:application/json' --data-binary '{
"delete-copy-field":{ "source":"shelf", "dest":"location" }
}' https://127.0.0.1:8983/solr/techproducts/schema
curl -X POST -H 'Content-type:application/json' --data-binary '{
"delete-copy-field":{ "source":"shelf", "dest":"location" }
}' https://127.0.0.1:8983/api/collections/techproducts/schema
在單一 POST 中執行多個指令
可以在單一指令中執行一個或多個新增請求。API 具有交易性,單一呼叫中的所有指令會一起成功或失敗。
指令會依照它們被指定的順序執行。這表示如果您想要建立一個新的欄位類型,並在同一個請求中將該欄位類型用於新的欄位,則建立欄位類型的請求區段必須在建立新欄位的區段之前。同樣地,由於必須存在欄位才能在複製欄位規則中使用,因此新增欄位的請求必須在請求該欄位作為複製欄位規則的來源或目的地的請求之前。
發出多個請求的語法支援多種方法。首先,可以簡單地按順序發出指令,例如這個請求會建立一個新的欄位類型,然後建立一個使用該類型欄位的欄位
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-field-type":{
"name":"myNewTxtField",
"class":"solr.TextField",
"positionIncrementGap":"100",
"analyzer":{
"charFilters":[{
"name":"patternReplace",
"replacement":"$1$1",
"pattern":"([a-zA-Z])\\\\1+" }],
"tokenizer":{
"name":"whitespace" },
"filters":[{
"name":"wordDelimiter",
"preserveOriginal":"0" }]}},
"add-field" : {
"name":"sell_by",
"type":"myNewTxtField",
"stored":true }
}' https://127.0.0.1:8983/solr/techproducts/schema
或者,可以重複相同的指令,如下例所示
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-field":{
"name":"shelf",
"type":"myNewTxtField",
"stored":true },
"add-field":{
"name":"location",
"type":"myNewTxtField",
"stored":true },
"add-copy-field":{
"source":"shelf",
"dest":[ "location", "catchall" ]}
}' https://127.0.0.1:8983/solr/techproducts/schema
最後,可以將重複的指令作為陣列傳送
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-field":[
{ "name":"shelf",
"type":"myNewTxtField",
"stored":true },
{ "name":"location",
"type":"myNewTxtField",
"stored":true }]
}' https://127.0.0.1:8983/solr/techproducts/schema
副本之間的綱要變更
在 SolrCloud 模式下執行時,在一個節點上對綱要所做的變更會傳播到集合中的所有副本。
您可以在請求中傳遞 updateTimeoutSecs
參數,以設定等待所有副本確認它們已套用綱要更新的秒數。這有助於您的用戶端應用程式更加穩健,因為您可以確保所有副本在定義的時間內都具有指定的綱要變更。
如果所有副本未在指定的時間內達成共識,則請求會失敗,並且錯誤訊息會包含哪些副本有問題的資訊。在大多數情況下,唯一的選擇是在等待短暫時間後重新嘗試變更。如果問題持續存在,則您可能需要調查在套用變更時遇到問題的副本上的伺服器記錄。
如果您未提供 updateTimeoutSecs
參數,則預設行為是接收節點在將更新保存到 ZooKeeper 後立即返回。所有其他副本將會非同步地套用更新。因此,如果不提供逾時,您的用戶端應用程式無法確定所有副本是否已套用變更。
擷取綱要資訊
以下端點可讓您讀取綱要的定義方式。您可以 GET 整個綱要,或僅擷取所需的部份。
要修改綱要,請參閱前一節「修改綱要」。
擷取整個綱要
GET /collection/schema
擷取綱要參數
路徑參數
collection
-
必填
預設值:無
集合(或核心)名稱。
查詢參數
查詢參數應在 '?' 後加入到 API 請求。
wt
-
選填
預設值:
json
定義回應的格式。選項為
json
、xml
或schema.xml
。
擷取綱要範例
以 JSON 格式取得整個綱要。
curl https://127.0.0.1:8983/solr/techproducts/schema
{
"responseHeader":{
"status":0,
"QTime":5},
"schema":{
"name":"example",
"version":1.5,
"uniqueKey":"id",
"fieldTypes":[{
"name":"alphaOnlySort",
"class":"solr.TextField",
"sortMissingLast":true,
"omitNorms":true,
"analyzer":{
"tokenizer":{
"class":"solr.KeywordTokenizerFactory"},
"filters":[{
"class":"solr.LowerCaseFilterFactory"},
{
"class":"solr.TrimFilterFactory"},
{
"class":"solr.PatternReplaceFilterFactory",
"replace":"all",
"replacement":"",
"pattern":"([^a-z])"}]}}],
"fields":[{
"name":"_version_",
"type":"long",
"indexed":true,
"stored":true},
{
"name":"author",
"type":"text_general",
"indexed":true,
"stored":true},
{
"name":"cat",
"type":"string",
"multiValued":true,
"indexed":true,
"stored":true}],
"copyFields":[{
"source":"author",
"dest":"text"},
{
"source":"cat",
"dest":"text"},
{
"source":"content",
"dest":"text"},
{
"source":"author",
"dest":"author_s"}]}}
以 XML 格式取得整個綱要。
curl https://127.0.0.1:8983/solr/techproducts/schema?wt=xml
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">5</int>
</lst>
<lst name="schema">
<str name="name">example</str>
<float name="version">1.5</float>
<str name="uniqueKey">id</str>
<arr name="fieldTypes">
<lst>
<str name="name">alphaOnlySort</str>
<str name="class">solr.TextField</str>
<bool name="sortMissingLast">true</bool>
<bool name="omitNorms">true</bool>
<lst name="analyzer">
<lst name="tokenizer">
<str name="class">solr.KeywordTokenizerFactory</str>
</lst>
<arr name="filters">
<lst>
<str name="class">solr.LowerCaseFilterFactory</str>
</lst>
<lst>
<str name="class">solr.TrimFilterFactory</str>
</lst>
<lst>
<str name="class">solr.PatternReplaceFilterFactory</str>
<str name="replace">all</str>
<str name="replacement"/>
<str name="pattern">([^a-z])</str>
</lst>
</arr>
</lst>
</lst>
...
<lst>
<str name="source">author</str>
<str name="dest">author_s</str>
</lst>
</arr>
</lst>
</response>
以 "schema.xml" 格式取得整個綱要。
curl https://127.0.0.1:8983/solr/techproducts/schema?wt=schema.xml
<schema name="example" version="1.7">
<uniqueKey>id</uniqueKey>
<types>
<fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory"/>
<filter class="solr.PatternReplaceFilterFactory" replace="all" replacement="" pattern="([^a-z])"/>
</analyzer>
</fieldType>
...
</types>
<copyField source="url" dest="text"/>
<copyField source="price" dest="price_c"/>
<copyField source="author" dest="author_s"/>
</schema>
列出欄位
取得所有欄位的清單。
GET /collection/schema/fields
GET /collection/schema/fields/fieldname
列出欄位參數
路徑參數
collection
-
必填
預設值:無
集合(或核心)名稱。
fieldname
-
選填
預設值:無
特定的欄位名稱(如果將請求限制為單一欄位)。
查詢參數
查詢參數可以在 '?' 後加入到 API 請求。
wt
-
選填
預設值:
json
定義回應的格式。選項為
json
或xml
。 fl
-
選填
預設值:無
以逗號或空格分隔的清單,包含要傳回的一個或多個欄位。如果未指定,則預設會傳回所有欄位。
includeDynamic
-
選填
預設值:
false
如果為
true
,並且指定了fl
查詢參數或使用了fieldname
路徑參數,則回應中會包含符合的動態欄位,並使用dynamicBase
屬性識別。如果未指定
fl
查詢參數或fieldname
路徑參數,則會忽略includeDynamic
查詢參數。如果為
false
,則不會傳回符合的動態欄位。 showDefaults
-
選填
預設值:
false
如果為
true
,則回應中會包含每個欄位類型中所有預設欄位屬性(例如,solr.TextField
的tokenized
)。如果為false
,則只會包含明確指定的欄位屬性。
列出欄位回應
輸出將會包含每個欄位和每個欄位定義的任何組態。每個欄位的定義組態可能會有所不同,但至少會包含欄位的 name
、type
、是否已建立 indexed
索引,以及是否已 stored
儲存。
如果 multiValued
定義為 true 或 false (最有可能為 true),也會顯示出來。請參閱 欄位 章節,以取得每個參數的更多資訊。
列出欄位範例
-
V1 API
-
V2 API
https://127.0.0.1:8983/solr/techproducts/schema/fields
curl -X GET "https://127.0.0.1:8983/api/collections/techproducts/schema/fields"
以下範例輸出已截斷,僅顯示少數幾個欄位。
{
"fields": [
{
"indexed": true,
"name": "_version_",
"stored": true,
"type": "long"
},
{
"indexed": true,
"name": "author",
"stored": true,
"type": "text_general"
},
{
"indexed": true,
"multiValued": true,
"name": "cat",
"stored": true,
"type": "string"
},
"..."
],
"responseHeader": {
"QTime": 1,
"status": 0
}
}
列出動態欄位
GET /collection/schema/dynamicfields
GET /collection/schema/dynamicfields/name
列出動態欄位參數
路徑參數
collection
-
必填
預設值:無
集合(或核心)名稱。
name
-
選填
預設值:無
動態欄位規則的名稱 (如果請求僅限於單一動態欄位規則)。
查詢參數
查詢參數可以在 '?' 後加入到 API 請求。
wt
-
選填
預設值:
json
定義回應的格式。選項為
json
或xml
。 showDefaults
-
選填
預設值:
false
如果為
true
,回應中將包含每個動態欄位之欄位類型中的所有預設欄位屬性 (例如solr.TextField
的tokenized
)。如果為false
,則僅包含明確指定的欄位屬性。
列出動態欄位回應
輸出將包含每個動態欄位規則以及每個規則的已定義組態。每個規則的已定義組態可能有所不同,但至少會包含動態欄位 name
、type
、是否 indexed
和是否 stored
。請參閱 動態欄位 章節,以取得每個參數的更多資訊。
列出動態欄位範例
取得所有動態欄位宣告的清單
-
V1 API
-
V2 API
https://127.0.0.1:8983/techproducts/schema/dynamicfields
curl -X GET "https://127.0.0.1:8983/api/collections/techproducts/schema/dynamicfields"
以下範例輸出已截斷。
{
"dynamicFields": [
{
"indexed": true,
"name": "*_coordinate",
"stored": false,
"type": "tdouble"
},
{
"multiValued": true,
"name": "ignored_*",
"type": "ignored"
},
{
"name": "random_*",
"type": "random"
},
{
"indexed": true,
"multiValued": true,
"name": "attr_*",
"stored": true,
"type": "text_general"
},
{
"indexed": true,
"multiValued": true,
"name": "*_txt",
"stored": true,
"type": "text_general"
},
"..."
],
"responseHeader": {
"QTime": 1,
"status": 0
}
}
列出欄位類型
GET /collection/schema/fieldtypes
GET /collection/schema/fieldtypes/name
列出欄位類型參數
路徑參數
collection
-
必填
預設值:無
集合(或核心)名稱。
name
-
選填
預設值:無
欄位類型的名稱 (如果請求僅限於單一欄位類型)。
查詢參數
查詢參數可以在 '?' 後加入到 API 請求。
wt
-
選填
預設值:
json
定義回應的格式。選項為
json
或xml
。 showDefaults
-
選填
預設值:
false
如果為
true
,回應中將包含每個動態欄位之欄位類型中的所有預設欄位屬性 (例如solr.TextField
的tokenized
)。如果為false
,則僅包含明確指定的欄位屬性。
列出欄位類型回應
輸出將包含每個欄位類型以及該類型的任何已定義組態。每個類型的已定義組態可能有所不同,但至少會包含欄位類型 name
和 class
。如果定義了查詢或索引分析器、斷詞器或篩選器,這些也會與其他已定義的參數一起顯示。請參閱 欄位類型定義和屬性 章節,以取得關於如何設定各種欄位類型的更多資訊。
列出欄位類型範例
取得所有欄位類型的清單。
-
V1 API
-
V2 API
curl https://127.0.0.1:8983/solr/techproducts/schema/fieldtypes
curl -X GET "https://127.0.0.1:8983/api/collections/techproducts/schema/fieldtypes"
以下範例輸出已截斷,僅顯示清單中不同部分的幾個不同欄位類型。
{
"fieldTypes": [
{
"analyzer": {
"class": "solr.TokenizerChain",
"filters": [
{
"class": "solr.LowerCaseFilterFactory"
},
{
"class": "solr.TrimFilterFactory"
},
{
"class": "solr.PatternReplaceFilterFactory",
"pattern": "([^a-z])",
"replace": "all",
"replacement": ""
}
],
"tokenizer": {
"class": "solr.KeywordTokenizerFactory"
}
},
"class": "solr.TextField",
"name": "alphaOnlySort",
"omitNorms": true,
"sortMissingLast": true
},
{
"class": "solr.FloatPointField",
"name": "float",
"positionIncrementGap": "0"
}]
}
列出複製欄位
GET /collection/schema/copyfields
列出複製欄位參數
路徑參數
collection
-
必填
預設值:無
集合(或核心)名稱。
查詢參數
查詢參數可以在 '?' 後加入到 API 請求。
wt
-
選填
預設值:
json
定義回應的格式。選項為
json
或xml
。 source.fl
-
選填
預設值:無
以逗號或空格分隔的一或多個複製欄位來源欄位清單,以包含在回應中。具有所有其他來源欄位的 CopyField 指令將從回應中排除。如果未指定,則回應中將包含所有 CopyField。
dest.fl
-
選填
預設值:無
以逗號或空格分隔的一或多個複製欄位目的地欄位清單,以包含在回應中。具有所有其他
dest
欄位的 CopyField 指令將被排除。如果未指定,則回應中將包含所有 CopyField。
列出複製欄位回應
輸出將包含 schema.xml
中定義的每個複製欄位規則的 source
和 dest
(目的地)。有關複製欄位的更多資訊,請參閱 複製欄位 章節。
列出複製欄位範例
取得所有 copyFields 的清單。
-
V1 API
-
V2 API
curl https://127.0.0.1:8983/solr/techproducts/schema/copyfields
curl -X GET "https://127.0.0.1:8983/api/collections/techproducts/schema/copyfields"
以下範例輸出已截斷為前幾個複製定義。
{
"copyFields": [
{
"dest": "text",
"source": "author"
},
{
"dest": "text",
"source": "cat"
},
{
"dest": "text",
"source": "content"
},
{
"dest": "text",
"source": "content_type"
}
],
"responseHeader": {
"QTime": 3,
"status": 0
}
}
顯示結構描述名稱
GET /collection/schema/name
顯示結構描述版本
GET /collection/schema/version
列出 UniqueKey
GET /collection/schema/uniquekey
顯示全域相似度
GET /collection/schema/similarity
顯示全域相似度參數
路徑參數
collection
-
必填
預設值:無
集合(或核心)名稱。
查詢參數
查詢參數可以在 '?' 後加入到 API 請求。
wt
-
選填
預設值:
json
定義回應的格式。選項為
json
或xml
。
顯示全域相似度範例
取得相似度實作。
-
V1 API
-
V2 API
curl https://127.0.0.1:8983/solr/techproducts/schema/similarity
curl -X GET "https://127.0.0.1:8983/api/collections/techproducts/schema/similarity"
{
"responseHeader":{
"status":0,
"QTime":1},
"similarity":{
"class":"org.apache.solr.search.similarities.DefaultSimilarityFactory"}}
管理資源資料
受管理資源 REST API 提供一種機制,讓任何 Solr 外掛程式公開應該支援 CRUD(建立、讀取、更新、刪除)操作的資源。根據您的結構描述中設定的欄位類型和分析器,可能會存在其他 /schema/
REST API 路徑。