模式设计器

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

image
图 1. 架构设计器屏幕

架构设计器屏幕上有多个面板,在您对架构进行更改时提供即时反馈,包括

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

  • 架构编辑器树,用于编辑字段、动态字段、字段类型和支持文件

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

  • 查询测试器面板,用于查看架构更改如何影响查询匹配、排序、分面和命中突出显示

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

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

授权要求

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

入门

首次进入 Schema Designer 时,系统将提示您创建一个新架构。

image

选择一个简短的名称,反映新架构的预期用例。您需要选择一个源架构作为新架构的起点。Solr 包含一个 _default 架构,为您的搜索应用程序构建自定义架构提供了良好的起点。发布架构后,可将其用于创建新架构,并且会列在对话框中的复制自下拉列表中。

创建新架构后,下一步是上传或粘贴您打算编入 Solr 索引的数据样本。Schema Designer 支持 JSON、CSV、TSV、XML 和 JSON 行 (jsonl)。

image

将样本文档粘贴到文本区域的优点在于,您可以编辑样本并立即在已分析的架构中查看更改的影响。如果您有大型或多个样本文档,上传功能很有用;Schema Designer API 允许最多 1,000 个样本文档或最多 5MB 的上传,但在大多数情况下,您只需少数文档即可开始。

点击分析文档按钮,将样本文档提交给 Schema Designer API,以生成您的新架构。

临时 Configset 和集合

在幕后,Schema Designer API 在 Zookeeper 中创建了一个临时Configset(架构 + solrconfig.xml + 支持文件)。此外,Schema Designer API 创建了一个具有单个分片和副本的临时集合,以保存样本文档。这些临时资源会持久保存到磁盘,并一直存在,直到架构发布或使用 Schema Designer API 清理端点 (/api/schema-designer/cleanup) 手动删除为止。

如果您在设计新架构时关闭了浏览器屏幕,则在您返回时该架构仍会可用。只需在选择框中选择您之前创建的架构的名称,您的架构就会加载到设计器 UI 中。

image

先前上传的样本文档会编入临时集合的索引中,即使它们不会显示在文本区域中。

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

受信任的 Config Set

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

使用 Schema Designer API 对 ConfigSet 的信任的影响与使用 ConfigSet 上传 API 的影响相同。

  • 如果您已通过身份验证

    • 如果您的源 configSet 受信任,那么您正在修改的临时 configSet 将保持受信任状态。

    • 如果您的源 configSet 不受信任,那么您正在修改的临时 configSet 将永远不受信任。

  • 如果您未通过身份验证

    • 为您创建的临时 configSet 不会 受信任。

发布临时 configSet 时,会使用临时 configSet 的信任来设置永久 configSet 的信任。

迭代发布示例文档

如果您有多个文件中的示例文档,您可以将它们发布到 Schema Designer API,然后在 Designer UI 中加载您的架构,以设计您的架构。以下是如何使用 API 来“准备”新架构,然后迭代地将 Solr 的 techproducts 示例文件发布到 Schema Designer 后端的示例

#!/bin/bash

SOLR_INSTALL_DIR="path/to/solr/install"

DIR_WITH_SAMPLE_FILES="$SOLR_INSTALL_DIR/example/exampledocs"

SOLR_URL=http://localhost: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

将示例文档发送到 Schema Designer 后端后,您可以在浏览器的 Schema Designer 屏幕中打开已准备好的架构。

Schema Designer API 主要用于支持 UI 中的交互式体验,而不是由开发人员以编程方式使用。要以编程方式创建和管理 Configset 和架构,请参阅部分 Configset APISchema API

架构编辑器

在分析了您的示例文档后,Schema Designer 会在中间面板的架构编辑器中加载架构。编辑器将架构呈现为一个树形组件,由字段、动态字段、字段类型和文件组成。有关架构对象的更多信息,请参阅 字段

image
架构与 Configset

Configset 包含一个架构,因此从技术上讲,Schema Designer 在幕后使用 Configset。但是,Configset 更像是一个技术实现细节,在设计新搜索应用程序时,您的主要重点应该是字段及其类型。因此,Schema Designer 主要关注 Configset 的架构方面,而不是在 UI 中公开 Configset 的复杂性。

当您单击 Schema Editor 树的根节点时,您可以优化顶级架构属性,包括

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

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

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

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

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

架构字段

单击编辑器树中的字段节点,以查看架构中字段的概述,以及管理 Solr 如何索引字段的 属性

image

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

image

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

image

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

在进行所需的更改后,单击更新字段按钮。Schema Designer 后端 API 将对架构应用更改,然后根据需要将示例文档重新编入临时集合。某些更改(例如将单值 docValues 字段更改为多值)可能需要删除底层 Lucene 索引并从头开始重建。当您的更改需要完全重建时,Schema Designer 会警告您。

image

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

小心更改已由具有已编入索引数据的集合使用的架构的字段属性。设计器无法保护您为正在使用的架构进行不兼容的更改。通常,为现有架构添加新字段和字段类型是安全的。更改字段和/或字段类型属性可能导致索引损坏。

Schema Designer 不支持从架构中删除字段。

文本分析

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

image

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

查询测试器

查询测试器面板允许您使用当前架构对示例文档集执行的查询进行实验。

使用查询测试器,您可以了解架构的更改如何影响查询的行为,例如匹配、排序、分面和突出显示。查询测试器表单并不旨在演示 Solr 中提供的所有可能的查询功能。

image

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

匹配问题还可能表明字段未复制到默认搜索字段中,例如一网打尽的 _text_ 字段。

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

类似地,测试人员表单列出了可以计算各个方面的所有字段;如果某个字段未在各个方面下拉列表中列出,则确保对其编制索引或已启用 docValues。

显示更改

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

image

如果您要更改已发布的架构,并且有使用该架构编制索引数据的集合,则需要小心。

发布

发布新架构使其在创建新集合时可供使用。发布对话框显示发布操作是否会影响任何现有集合;当然,新架构不会有任何受影响的集合。您还可以在发布期间创建一个使用新架构的新集合,并选择是否在新集合中编制示例文档的索引。

image

您还可以选择通过架构设计器阻止对该架构进行未来更改。但是,此设置仅适用于架构设计器 UI,并不阻止某人直接使用架构 API 更改架构。

一旦发布操作完成,临时 Configset 和集合将被删除,架构设计器 UI 将重置为全新状态。

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