結構描述 API

結構描述 API 允許您使用 HTTP API 來管理結構描述的許多元素。

此 API 提供對每個集合(或在未執行 SolrCloud 時為核心)的 Solr 結構描述的讀取和寫入存取權限。支援讀取所有結構描述元素。可以新增、移除或取代欄位、動態欄位、欄位類型和 copyField 規則。未來的 Solr 版本將擴展寫入存取權限,以允許修改更多結構描述元素。

結構描述 API 使用 ManagedIndexSchemaFactory 類別,這是現代 Solr 版本中的預設結構描述工廠。請參閱 結構描述工廠設定 一節,以取得有關為索引選擇結構描述工廠的詳細資訊。

不建議手動編輯受管理的結構描述

範例設定中的名為「managed-schema.xml」的檔案可能包含一個說明,建議永遠不要手動編輯該檔案。在結構描述 API 存在之前,這類編輯是變更結構描述的唯一方法,而使用者可能強烈希望繼續以這種方式進行變更。

不建議這樣做的原因是,如果稍後使用此處描述的結構描述 API 進行變更,則結構描述的手動編輯可能會遺失,除非在使用結構描述 API 之前重新載入核心或集合,或重新啟動 Solr。如果謹慎地在手動編輯後始終重新載入或重新啟動,則進行這些編輯完全沒有問題。

在 Solr 9 之前,此 xml 檔案稱為 managed-schema,沒有檔案副檔名。

此 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 區段替換為 indexAnalyzerqueryAnalyzer 的個別區段。如下範例所示

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 指令會從您的綱要中刪除複製欄位規則。如果該複製欄位規則不存在於綱要中,則會擲回錯誤。

此指令需要 sourcedest 屬性。

例如,要刪除一個將 "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

定義回應的格式。選項為 jsonxmlschema.xml

擷取綱要回應

輸出內容

輸出將會包含所有欄位、欄位類型、動態規則和複製欄位規則,以請求的格式(JSON 或 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

定義回應的格式。選項為 jsonxml

fl

選填

預設值:無

以逗號或空格分隔的清單,包含要傳回的一個或多個欄位。如果未指定,則預設會傳回所有欄位。

includeDynamic

選填

預設值:false

如果為 true,並且指定了 fl 查詢參數或使用了 fieldname 路徑參數,則回應中會包含符合的動態欄位,並使用 dynamicBase 屬性識別。

如果未指定 fl 查詢參數或 fieldname 路徑參數,則會忽略 includeDynamic 查詢參數。

如果為 false,則不會傳回符合的動態欄位。

showDefaults

選填

預設值:false

如果為 true,則回應中會包含每個欄位類型中所有預設欄位屬性(例如,solr.TextFieldtokenized)。如果為 false,則只會包含明確指定的欄位屬性。

列出欄位回應

輸出將會包含每個欄位和每個欄位定義的任何組態。每個欄位的定義組態可能會有所不同,但至少會包含欄位的 nametype、是否已建立 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

定義回應的格式。選項為 jsonxml

showDefaults

選填

預設值:false

如果為 true,回應中將包含每個動態欄位之欄位類型中的所有預設欄位屬性 (例如 solr.TextFieldtokenized)。如果為 false,則僅包含明確指定的欄位屬性。

列出動態欄位回應

輸出將包含每個動態欄位規則以及每個規則的已定義組態。每個規則的已定義組態可能有所不同,但至少會包含動態欄位 nametype、是否 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

定義回應的格式。選項為 jsonxml

showDefaults

選填

預設值:false

如果為 true,回應中將包含每個動態欄位之欄位類型中的所有預設欄位屬性 (例如 solr.TextFieldtokenized)。如果為 false,則僅包含明確指定的欄位屬性。

列出欄位類型回應

輸出將包含每個欄位類型以及該類型的任何已定義組態。每個類型的已定義組態可能有所不同,但至少會包含欄位類型 nameclass。如果定義了查詢或索引分析器、斷詞器或篩選器,這些也會與其他已定義的參數一起顯示。請參閱 欄位類型定義和屬性 章節,以取得關於如何設定各種欄位類型的更多資訊。

列出欄位類型範例

取得所有欄位類型的清單。

  • 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

定義回應的格式。選項為 jsonxml

source.fl

選填

預設值:無

以逗號或空格分隔的一或多個複製欄位來源欄位清單,以包含在回應中。具有所有其他來源欄位的 CopyField 指令將從回應中排除。如果未指定,則回應中將包含所有 CopyField。

dest.fl

選填

預設值:無

以逗號或空格分隔的一或多個複製欄位目的地欄位清單,以包含在回應中。具有所有其他 dest 欄位的 CopyField 指令將被排除。如果未指定,則回應中將包含所有 CopyField。

列出複製欄位回應

輸出將包含 schema.xml 中定義的每個複製欄位規則的 sourcedest(目的地)。有關複製欄位的更多資訊,請參閱 複製欄位 章節。

列出複製欄位範例

取得所有 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

顯示結構描述參數

路徑參數

collection

必填

預設值:無

集合(或核心)名稱。

查詢參數

查詢參數可以在 '?' 後加入到 API 請求。

wt

選填

預設值:json

定義回應的格式。選項為 jsonxml

顯示結構描述回應

輸出將僅是給予結構描述的名稱。

顯示結構描述範例

取得結構描述名稱。

  • V1 API

  • V2 API

curl https://127.0.0.1:8983/solr/techproducts/schema/name
curl -X GET "https://127.0.0.1:8983/api/collections/techproducts/schema/name"
{
  "responseHeader":{
    "status":0,
    "QTime":1},
  "name":"example"}

顯示結構描述版本

GET /collection/schema/version

顯示結構描述版本參數

路徑參數

collection

必填

預設值:無

集合(或核心)名稱。

查詢參數

查詢參數可以在 '?' 後加入到 API 請求。

wt

選填

預設值:json

定義回應的格式。選項為 jsonxml

顯示結構描述版本回應

輸出將僅是正在使用的結構描述版本。

顯示結構描述版本範例

取得結構描述版本

  • V1 API

  • V2 API

curl https://127.0.0.1:8983/solr/techproducts/schema/version
curl -X GET "https://127.0.0.1:8983/api/collections/techproducts/schema/version"
{
  "responseHeader":{
    "status":0,
    "QTime":2},
  "version":1.5}

列出 UniqueKey

GET /collection/schema/uniquekey

列出 UniqueKey 參數

路徑參數

collection

必填

預設值:無

集合(或核心)名稱。

查詢參數

查詢參數可以在 '?' 後加入到 API 請求。

wt

選填

預設值:json

定義回應的格式。選項為 jsonxml

列出 UniqueKey 回應

輸出將僅包含定義為索引 uniqueKey 的欄位名稱。

列出 UniqueKey 範例

列出 uniqueKey。

  • V1 API

  • V2 API

curl https://127.0.0.1:8983/solr/techproducts/schema/uniquekey
curl -X GET "https://127.0.0.1:8983/api/collections/techproducts/schema/uniquekey"
{
  "responseHeader":{
    "status":0,
    "QTime":2},
  "uniqueKey":"id"}

顯示全域相似度

GET /collection/schema/similarity

顯示全域相似度參數

路徑參數

collection

必填

預設值:無

集合(或核心)名稱。

查詢參數

查詢參數可以在 '?' 後加入到 API 請求。

wt

選填

預設值:json

定義回應的格式。選項為 jsonxml

顯示全域相似度回應

輸出將包含定義的全域相似度類別名稱(如果有的話)。

顯示全域相似度範例

取得相似度實作。

  • 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 路徑。