模式工厂配置

Solr 支持两种模式的架构:托管架构和手动维护的 schema.xml 文件。使用托管架构时,可以使用 架构 API无架构模式 等功能。使用 schema.xml 时,更改 Solr 架构的唯一方法是手动编辑该文件。

<schemaFactory> 在 solrconfig.xml 中

solrconfig.xml 中的 <schemaFactory> 定义您的系统将使用托管架构还是 schema.xml

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

虽然架构 API 的“读取”功能支持所有架构类型,但对以编程方式进行架构修改的支持取决于所使用的 <schemaFactory/>

架构工厂

ManagedIndexSchemaFactory

如果在 solrconfig.xml 文件中未明确声明 <schemaFactory/>,Solr 会隐式使用 ManagedIndexSchemaFactory,它默认情况下为 “mutable”(可编辑),并将架构信息保存在 managed-schema.xml 文件中。

使用 Managed Schema 是使用 Schema API 修改架构的必要条件。但是,使用 Managed Schema 并不意味着您也在 Schemaless 模式(或“架构猜测”模式)中使用 Solr。

Schemaless 模式要求启用 Managed Schema(如果尚未启用),但完整的架构猜测需要其他配置,如 Schemaless 模式 一节中所述。

以下是反映 Solr 默认设置的 schemaFactory 示例

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

可以通过明确配置 ManagedIndexSchemaFactory 并更改以下选项之一来覆盖默认设置

mutable

可选

默认值:true

控制是否可以对架构数据进行更改。必须将其设置为 true 才能允许使用 Schema API 进行编辑。

使用上面显示的默认配置,您可以使用 Schema API 随意修改架构,然后将 mutable 的值更改为 false 以“锁定”架构并防止将来进行更改。

managedSchemaResourceName

可选

默认值:managed-schema.xml

架构文件的文件名。文件名可以是除 schema.xml 之外的任何名称,因为该名称已为 ClassicIndexSchemaFactory 保留。

ClassicIndexSchemaFactory

使用托管架构的替代方法是明确配置 ClassicIndexSchemaFactory。这需要使用 schema.xml 文件,并且不允许在运行时对架构进行任何编程更改。必须手动编辑 schema.xml 文件,并且仅在加载集合时才加载该文件。

  <schemaFactory class="ClassicIndexSchemaFactory"/>

此选项不采用任何参数。

更改架构工厂

从 schema.xml 切换到 Managed Schema

如果您有一个使用 ClassicIndexSchemaFactory 的现有 Solr 集合,并且希望转换为使用托管架构,则可以简单地修改 solrconfig.xml 以指定使用 ManagedIndexSchemaFactory

一旦 Solr 重新启动并检测到 schema.xml 文件存在,但 managedSchemaResourceName 文件(即“managed-schema.xml”)不存在,现有的 schema.xml 文件将被重命名为 schema.xml.bak,并且内容将重新写入托管架构文件。

如果您查看结果文件,您将在页面顶部看到以下内容

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

您现在可以自由使用 Schema API 进行更改,并删除 schema.xml.bak

从 Managed Schema 切换到 schema.xml

如果您已启用托管架构启动 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 文件,您可能还想禁用架构猜测,这允许在索引期间将未知字段添加到架构中。启用此功能的属性在部分 无模式模式 中进行了讨论。