Schema 工廠設定

Solr 支援兩種 Schema 樣式:受管理的 Schema 和手動維護的 schema.xml 檔案。使用受管理 Schema 時,可以使用 Schema API無 Schema 模式等功能。使用 schema.xml 時,變更 Solr Schema 的唯一方法是手動編輯該檔案。

solrconfig.xml 中的 <schemaFactory>

solrconfig.xml 中的 <schemaFactory> 定義您的系統將使用受管理的 Schema 還是 schema.xml

<config>
  <schemaFactory>
    ...
  </schemaFactory>
</config>

雖然所有 Schema 類型都支援 Schema API 的「讀取」功能,但以程式方式進行 Schema 修改的支援取決於使用的 <schemaFactory/>

Schema 工廠

ManagedIndexSchemaFactory

如果未在 solrconfig.xml 檔案中明確宣告 <schemaFactory/>,Solr 會隱含地使用 ManagedIndexSchemaFactory,其預設為 "mutable"(可編輯),並將 Schema 資訊保存在 managed-schema.xml 檔案中。

必須使用受管理 Schema 才能使用 Schema API 修改您的 Schema。但是,使用受管理 Schema 並不表示您同時以無 Schema 模式(或「Schema 猜測」模式)使用 Solr。

無 Schema 模式需要啟用受管理 Schema(如果尚未啟用),但完整的 Schema 猜測需要額外設定,如 無 Schema 模式一節所述。

以下是一個 schemaFactory 的範例,反映 Solr 的預設值

  <schemaFactory class="ManagedIndexSchemaFactory">
    <bool name="mutable">true</bool>
    <str name="managedSchemaResourceName">managed-schema.xml</str>
  </schemaFactory>

可以透過明確設定 ManagedIndexSchemaFactory 並變更下列其中一個選項來覆寫預設值

mutable

選用

預設值:true

控制是否可以變更 Schema 資料。必須將此設定為 true,才能允許使用 Schema API 進行編輯。

使用以上顯示的預設設定,您可以使用 Schema API 隨意修改 Schema,然後稍後將 mutable 的值變更為 false,以「鎖定」Schema 並防止未來變更。

managedSchemaResourceName

選用

預設值:managed-schema.xml

Schema 檔案的名稱。名稱可以是 schema.xml 以外的任何名稱,因為該名稱保留給 ClassicIndexSchemaFactory 使用。

ClassicIndexSchemaFactory

使用受管理 Schema 的替代方案是明確設定 ClassicIndexSchemaFactory。這需要使用 schema.xml 檔案,並且不允許在執行時以程式方式變更 Schema。必須手動編輯 schema.xml 檔案,且僅在載入集合時載入該檔案。

  <schemaFactory class="ClassicIndexSchemaFactory"/>

此選項不採用任何參數。

變更 Schema 工廠

從 schema.xml 切換到受管理 Schema

如果您現有的 Solr 集合使用 ClassicIndexSchemaFactory,且您希望轉換為使用受管理 Schema,您可以簡單地修改 solrconfig.xml 以指定使用 ManagedIndexSchemaFactory

重新啟動 Solr 並偵測到 schema.xml 檔案存在,但 managedSchemaResourceName 檔案(即「managed-schema.xml」)不存在時,現有的 schema.xml 檔案將會重新命名為 schema.xml.bak,並將內容重新寫入受管理 Schema 檔案中。

如果您查看產生的檔案,您會在頁面頂端看到以下內容

<!-- Solr managed schema - automatically generated - DO NOT EDIT -->

現在您可以自由使用 Schema API 進行變更,並移除 schema.xml.bak

從管理 Schema 切換到 schema.xml

如果您已啟用管理 Schema 啟動 Solr,而您想要切換為手動編輯 schema.xml 檔案,您應該採取以下步驟

  1. managed-schema.xml 檔案重新命名為 schema.xml

  2. 修改 solrconfig.xml 以替換 schemaFactory 類別。

    1. 移除任何現有的 ManagedIndexSchemaFactory 定義。

    2. 加入一個 ClassicIndexSchemaFactory 定義,如上方所示。

  3. 重新載入核心。

如果您使用 SolrCloud,您可能需要透過 ZooKeeper 修改檔案。bin/solr 腳本提供了一個簡單的方式,可以從 ZooKeeper 下載檔案,並在編輯後將它們上傳回去。請參閱ZooKeeper 操作章節以獲取更多資訊。

為了完全掌控您的 schema.xml 檔案,您可能還想要停用 schema 猜測,這允許在索引期間將未知的欄位新增到 schema 中。啟用此功能的屬性將在無 Schema 模式章節中討論。