模式设计器

“模式设计器”屏幕允许您使用示例数据交互式地设计新模式。

image
图 1. “模式设计器”屏幕

“模式设计器”屏幕上有许多面板,可以在您对模式进行更改时提供即时反馈,包括:

  • 上传/粘贴示例文档以查找字段并猜测正确的字段类型和索引策略

  • “模式编辑器”树用于编辑字段、动态字段、字段类型和支持文件

  • “文本分析”面板用于显示基于所选字段的示例文本的文本分析管道

  • “查询测试器”面板用于查看模式更改如何影响查询匹配、排序、分面和命中高亮显示

  • “显示更改”对话框用于查看发布之前设计器所做的所有更改的报告

“模式设计器”允许您编辑现有模式,但其主要目的是帮助您安全地从示例数据设计新模式。您可以安全地尝试更改,并立即查看对查询结果的影响。一旦使用已发布的模式索引数据,则对模式可以进行的更改类型有严格的限制,而无需完全重新索引。在设计新模式时,“模式设计器”会在您进行更改时自动重新索引您的示例数据。但是,设计器不会重新索引使用已发布模式的集合中的数据。

授权要求

如果为您的 Solr 安装启用了基于规则的授权插件,则用户需要具有 config-editconfig-read 权限才能使用“模式设计器”。

入门

首次进入“模式设计器”时,系统会提示您创建新模式。

image

选择一个简短的名称,以反映您新模式的预期用例。您需要选择一个源模式作为新模式的起点进行复制。Solr 包含一个 _default 模式,为您的搜索应用程序构建自定义模式提供了一个良好的起点。一旦发布了模式,它就可以用于创建新模式,并且将列在对话框的“从以下位置复制”下拉列表中。

创建新模式后,下一步是上传或粘贴您打算索引到 Solr 中的数据的示例。“模式设计器”支持 JSON、CSV、TSV、XML 和 JSON 行 (jsonl)。

image

将示例文档粘贴到文本区域的优点在于,您可以编辑示例并立即在分析的模式中看到更改的影响。如果您有大量或多个示例文档,上传功能非常有用;模式设计器 API 最多允许上传 1,000 个示例文档或最大 5MB 的上传,但在大多数情况下,您只需要少量文档即可开始。

单击分析文档按钮,将示例文档提交到模式设计器 API 以生成新的模式。

临时 Configset 和集合

在幕后,模式设计器 API 会在 Zookeeper 中创建一个临时的 Configsets(模式 + solrconfig.xml + 支持文件)。此外,模式设计器 API 会创建一个具有单个分片和副本的临时集合,以保存示例文档。这些临时资源会持久保存到磁盘,并且在发布模式或使用模式设计器 API 清理端点 (/api/schema-designer/cleanup) 手动删除之前一直存在。

如果您在设计新模式时关闭浏览器屏幕,它将在您返回时可用。只需在选择框中选择您之前创建的模式名称,您的模式将加载到设计器 UI 中。

image

以前上传的示例文档已在临时集合中建立索引,即使它们未在文本区域中显示。

单击 查询结果 面板上的编辑文档按钮,将索引文档的 JSON 表示形式加载到文本区域中。

受信任的 Config Sets

当从 solrconfig.xml 加载额外的库并使用 Solr 的某些功能时,ConfigSet 信任是必要的。有关受信任的 ConfigSets 的更多信息,请参阅 ConfigSet API 部分。

使用模式设计器 API 对 ConfigSet 信任的影响与使用 ConfigSet 上传 API 的效果相同。

  • 如果您已通过身份验证

    • 如果您的源 ConfigSet 受信任的,则您正在修改的临时 ConfigSets 将保持受信任。

    • 如果您的源 ConfigSet 不是受信任的,则您正在修改的临时 ConfigSet 将永远不会受信任。

  • 如果您未通过身份验证

    • 为您创建的临时 ConfigSet 将受信任。

发布临时 ConfigSet时,临时 ConfigSet 的信任用于设置永久 ConfigSet 的信任。

迭代地发布示例文档

如果您的示例文档分布在多个文件中,您可以将其 POST 到模式设计器 API,然后在设计器 UI 中加载您的模式以设计您的模式。以下是如何使用 API “准备”新模式,然后迭代地将 Solr 的 techproducts 示例文件发布到模式设计器后端的示例

#!/bin/bash

SOLR_INSTALL_DIR="path/to/solr/install"

DIR_WITH_SAMPLE_FILES="$SOLR_INSTALL_DIR/example/exampledocs"

SOLR_URL=https://127.0.0.1:8983

MY_NEW_SCHEMA="myNewSchema"

echo "Preparing new schema: ${MY_NEW_SCHEMA}"
curl -s -o /dev/null -w "%{http_code}" -XPOST \
  "$SOLR_URL/api/schema-designer/prep?configSet=${MY_NEW_SCHEMA}&copyFrom=_default"
echo ""

SAMPLE_FILES=( $(ls ${DIR_WITH_SAMPLE_FILES}/*.{xml,csv,json,jsonl}) )
for f in "${SAMPLE_FILES[@]}"
do
  echo "POST'ing contents of $f to Schema Designer analyze endpoint ..."
  curl -s -o /dev/null -w "%{http_code}" -XPOST \
    "$SOLR_URL/api/schema-designer/analyze?configSet=${MY_NEW_SCHEMA}" -d @"$f"
  echo ""
done

将示例文档发送到模式设计器后端后,您可以在浏览器中的模式设计器屏幕中打开已准备好的模式。

模式设计器 API 主要用于支持 UI 中的交互式体验,而不是由开发人员以编程方式使用。要以编程方式创建和管理 Configsets 和模式,请参阅 Configsets API模式 API 部分。

模式编辑器

分析完示例文档后,模式设计器会在中间面板的 模式编辑器 中加载模式。编辑器将模式呈现为由字段、动态字段、字段类型和文件组成的树组件。有关模式对象的更多信息,请参阅 字段

image
模式 vs. Configset

Configset 包括一个模式,因此从技术上讲,模式设计器在幕后使用 Configset。但是,Configset 更像是一个技术实现细节,并且在设计新的搜索应用程序时,您的主要重点应放在字段及其类型上。因此,模式设计器主要关注 Configset 的模式方面,而不是在 UI 中暴露 Configset 的复杂性。

当您单击模式编辑器树的根节点时,您可以优化顶层模式属性,包括

  • 语言:_default 模式包含多种常用语言的文本字段。您可以在模式中包含所有文本分析器,或根据您的搜索应用程序需要支持的语言选择子集。设计器将删除您不需要的语言的所有不必要的字段类型。有关文本分析和语言的更多信息,请参阅 语言分析

  • 动态字段允许 Solr 为您未在模式中明确定义的字段建立索引。动态字段可以通过提供一些灵活性,允许您添加到 Solr 的文档中,从而使您的应用程序不那么脆弱。建议为您的模式启用默认的动态字段集。取消选中此选项将从您的模式中删除所有动态字段。有关动态字段的更多信息,请参阅 动态字段

  • 字段猜测(又名“无模式模式”)允许 Solr 检测索引期间遇到的未知字段的“最佳”字段类型。字段猜测还会执行一些字段转换,例如删除字段名称中的空格。如果您使用模式设计器根据示例文档创建模式,则可能不需要启用此功能。但是,如果禁用此功能,您需要确保传入的数据与模式完全匹配,否则可能会发生索引错误。有关无模式模式的更多信息,请参阅 无模式模式

  • 启用此功能会将 rootnest_path 字段添加到您的模式。有关索引嵌套子文档的更多信息,请参阅 索引嵌套文档

仅当您完全了解这些顶层模式属性如何影响您的搜索应用程序的行为时,才对其进行更改。刚开始时,您可以保留默认设置,并将注意力集中在模式中的字段和字段类型上。

模式字段

单击编辑器树中的 字段 节点,查看模式中字段的概述,以及控制 Solr 如何索引字段的 属性

image

如果您的模式中有许多字段,您可以使用树顶部的过滤器按类型或功能过滤显示的字段。例如,要过滤启用了 docValues 的字段,请选择 feature,然后选择 docValues 并选中 enabled

image

要编辑字段,请单击树中的字段名称,将字段信息加载到树右侧的主编辑器面板中。

image

在更改特定字段的属性之前,请考虑是否应改为更改 字段类型 上的属性,因为应用于字段类型的更改将应用于使用该类型的所有字段。

进行所需的更改后,单击 更新字段 按钮。模式设计器后端 API 会将更改应用于模式,然后在需要时将示例文档重新索引到临时集合中。某些更改,例如将单值 docValues 字段更改为多值,可能需要删除底层 Lucene 索引并从头开始重建。当您的更改需要完全重建时,模式设计器会发出警告。

image

此外,如果您根据示例数据将字段更改为不兼容的类型,则设计器将自动撤消更改。例如,将具有文本数据的字段更改为数字类型将被设计器拒绝。

对于已由具有索引数据的集合使用的模式,请谨慎更改字段属性。设计器无法保护您免于对正在使用的模式进行不兼容的更改。通常,为现有模式添加新字段和字段类型是安全的操作。更改字段和/或字段类型属性可能会导致索引损坏。

模式设计器不支持从模式中删除字段。

文本分析

当您在树中选择一个基于文本的字段时,文本分析面板会显示如何分析来自示例文档的文本以进行索引。

image

如果需要更改字段的文本分析策略,则需要编辑字段类型。有关文本分析的更多信息,请参阅 分析器

查询测试器

使用 查询测试器 面板,您可以尝试使用当前模式对您的示例文档集执行的查询。

使用查询测试器,您可以查看对模式的更改如何影响查询的行为,例如匹配、排序、分面和突出显示。查询测试器表单并非旨在演示 Solr 中可用的所有可能的查询功能。

image

每当您对模式进行更改时,都会重新提交查询测试器表单以刷新查询结果。这有助于您了解匹配问题,其中测试查询应查找示例文档但未返回正确的结果,这表明字段未正确索引,例如使用 string 而不是文本分析的字段类型。

匹配问题也可能表明该字段未复制到默认搜索字段中,例如包罗万象的 _text_ 字段。

查询测试器表单列出了 排序依据 下拉菜单中支持排序的所有字段。如果未列出您需要排序的字段,请确保它是单值的并且已建立索引或启用了 docValues。

同样,测试器表单会列出您可以为其计算分面的所有字段;如果分面下拉菜单中未列出某个字段,请确保已对其建立索引或启用了 docValues。

显示更改

点击 显示更改 按钮,查看当前编辑会话期间对模式所做更改的报告。未发布的更改将与您复制的原始模式(例如 _default)或已发布的模式进行比较。

image

更改已发布的模式时需要小心,如果存在使用该模式索引数据的集合。

发布

发布新的模式使其在创建新集合时可用。“发布”对话框会显示任何现有集合是否会受到发布操作的影响;当然,对于新模式,不会有任何受影响的集合。您还可以在发布期间创建使用新模式的新集合,并选择是否在新集合中索引您的示例文档。

image

您还可以选择阻止 Schema Designer 对此模式进行未来更改。但是,此设置仅适用于 Schema Designer UI,并不能阻止某人直接使用 Schema API 更改模式。

一旦发布操作完成,临时的 Configset 和集合将被删除,Schema Designer UI 将重置回初始状态。

或者,除了发布到 Zookeeper,您还可以将 Configset 下载到包含模式、solrconfig.xml 和支持文件的 zip 文件中。可以使用 Configsets API 将该 zip 文件上传到其他 Solr 实例,或将其保存在版本控制中。