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 API 的“读取”功能支持所有 Schema 类型,但以编程方式进行 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 模式 部分所述。

以下是一个反映 Solr 默认值的 schemaFactory 示例

  <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

如果您有一个使用 ClassicIndexSchemaFactory 的现有 Solr 集合,并且希望转换为使用托管 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

如果你的 Solr 启动时启用了托管模式(managed schema),并且你想切换到手动编辑 schema.xml 文件,你应该采取以下步骤:

  1. managed-schema.xml 文件重命名为 schema.xml

  2. 修改 solrconfig.xml 文件,替换 schemaFactory 类。

    1. 移除任何 ManagedIndexSchemaFactory 的定义(如果存在)。

    2. 添加一个 ClassicIndexSchemaFactory 的定义,如上所示。

  3. 重新加载核心(core)。

如果你正在使用 SolrCloud,你可能需要通过 ZooKeeper 修改这些文件。 bin/solr 脚本提供了一种简单的方法来从 ZooKeeper 下载文件,并在编辑后将其上传回去。有关更多信息,请参阅ZooKeeper 操作部分。

为了完全控制你的 schema.xml 文件,你可能还需要禁用模式猜测(schema guessing),它允许在索引期间将未知的字段添加到模式中。启用此功能的属性在无模式模式部分讨论。