配置集 API

Configsets API 使您能够将新的 configset 上传到 ZooKeeper,在 Solr 运行 SolrCloud 模式时创建和删除 configset。

Configset 是一个配置文件集合,例如 solrconfig.xmlsynonyms.txt、模式、特定语言的文件以及其他集合级配置文件(通常位于 conf 目录中的所有内容)。Solr 附带两个示例 configset(_defaultsample_techproducts_configs),可在创建集合时使用。使用相同的概念,您可以创建自己的 configset,并在创建集合时使其可用。

此 API 提供了一种将配置文件上传到 ZooKeeper 并使两个或更多集合共享同一组配置文件的方法。

将 configset 上传到 ZooKeeper 后,在使用 Collections API 创建集合时使用 configset 名称,该集合将使用您的配置文件。

如果 configset 是使用此 API 上传的,则不必在集合之间共享,但如果您愿意,此 API 会让共享变得更容易。提前上传 configset 的一种替代方法是将配置文件放入 server/solr/configsets 下的目录中,并在使用 bin/solr create 创建集合时将目录名称用作 -d 参数。

此 API 仅可用于在 SolrCloud 模式下运行的 Solr。如果您没有在 SolrCloud 模式下运行 Solr,但仍想使用共享配置,请参阅部分 配置集

此 API 通过向 configs 端点传递命令来工作。端点的路径根据所使用的 API 而异:v1 API 使用 solr/admin/configs,而 v2 API 使用 api/cluster/configs。下面提供了两种类型的示例。

列出配置集

list 命令获取在集合创建期间可供使用的配置集的名称。

V1 API

使用 v1 API 时,list 命令必须大写为 LIST

http://localhost:8983/solr/admin/configs?action=LIST&omitHeader=true

V2 API

使用 v2 API 时,当没有随请求发送数据时,list 命令是隐含的。

http://localhost:8983/api/cluster/configs?omitHeader=true

输出将如下所示

{
  "configSets": [
    "_default",
    "techproducts",
    "gettingstarted"
  ]
}

上传配置集

上传配置集,该配置集作为压缩文件发送。还可以使用 filePath 参数上传单个非压缩文件。

此功能默认启用,但可以通过运行时参数 -Dconfigset.upload.enabled=false 禁用。如果您想将 Solr 安装公开给不受信任的用户(即使您永远不应该这样做!),建议禁用此功能。

如果启用了身份验证并且上传操作作为经过身份验证的请求执行,则配置集将以“受信任”模式上传。如果没有身份验证,则配置集将以“不受信任”模式上传。在使用“不受信任”配置集创建集合后,以下功能将无法使用

  • XSLT 转换器(tr 参数)不能在请求处理时使用。

  • 如果在配置集中指定,ScriptUpdateProcessorFactory 将不会初始化。

  • 如果在配置集中使用了 <lib> 指令,则集合不会初始化。(注意:添加到 Solr 类路径的库不需要 <lib> 指令)

如果您使用其中任何参数或功能,则必须在 Solr 安装中启用安全功能,并且必须以经过身份验证的用户身份上传配置集。

并非所有文件类型都支持在 configSets 中使用。有关更多信息,请参阅 configuration-guide:config-sets.adoc#forbidden-file-types

upload 命令采用以下参数

name

必需

默认值:无

上传完成后要创建的配置集。

覆盖

可选

默认值:参见说明

如果设置为 true,Solr 将使用同名的现有配置集进行覆盖(如果为 false,请求将失败)。如果提供了 filePath,则此选项指定如果配置集内的指定文件已存在,是否应将其覆盖。使用 v1 API 时,默认值为 false,但使用 v2 API 时,默认值为 true

清理

可选

默认值:false

覆盖现有配置集(overwrite=true)时,此参数指示 Solr 删除旧配置集中存在但未在上传配置集中存在的文件。当使用 filePath 时,此参数不能设置为 true。

filePath

可选

默认值:无

此参数允许将单个未压缩文件上传到 ZooKeeper 中配置集下的给定路径。此功能遵循 overwrite 参数,因此如果给定的文件路径已存在于配置集中且覆盖设置为 false,则请求将失败。当使用 filePath 时,cleanup 参数不能设置为 true。

如果上传整个配置集,请求正文应为包含配置集的 zip 文件。zip 文件必须在 conf 目录中创建(即,solrconfig.xml 必须是 zip 文件中的顶级条目)。

以下是如何创建名为“myconfig.zip”的 zip 文件并将其作为名为“myConfigSet”的配置集上传的示例

V1 API

对于 v1 API,upload 命令必须大写为 UPLOAD

$ (cd solr/server/solr/configsets/sample_techproducts_configs/conf && zip -r - *) > myconfigset.zip

$ curl -X POST --header "Content-Type:application/octet-stream" --data-binary @myconfigset.zip "http://localhost:8983/solr/admin/configs?action=UPLOAD&name=myConfigSet"

可以使用 Unix 管道通过单个请求实现相同目的,如下所示

$ (cd server/solr/configsets/sample_techproducts_configs/conf && zip -r - *) | curl -X POST --header "Content-Type:application/octet-stream" --data-binary @- "http://localhost:8983/solr/admin/configs?action=UPLOAD&name=myConfigSet"

V2 API

对于 v2 API,要上传的配置集的名称作为路径参数提供

$ (cd solr/server/solr/configsets/sample_techproducts_configs/conf && zip -r - *) > myconfigset.zip

$ curl -X PUT --header "Content-Type:application/octet-stream" --data-binary @myconfigset.zip
    "http://localhost:8983/api/cluster/configs/myConfigSet"

使用此 API 时,默认行为是如果配置集已存在,则覆盖它。可以通过参数 overwrite=false 禁用此行为,在这种情况下,如果配置集已存在,请求将失败。

以下是如何将单个文件上传到名为“myConfigSet”的配置集的示例

V1 API

对于 v1 API,upload 命令必须大写为 UPLOAD。要上传的文件名通过 filePath 参数提供

curl -X POST --header "Content-Type:application/octet-stream"
    --data-binary @solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
    "http://localhost:8983/solr/admin/configs?action=UPLOAD&name=myConfigSet&filePath=solrconfig.xml&overwrite=true"

V2 API

使用 v2 API 时,configset 和文件的名称都提供在 URL 中。它们可以在 /cluster/configs/config_name/file_name 中替换。文件名可以嵌套,并包含 / 字符。

curl -X PUT --header "Content-Type:application/octet-stream"
    --data-binary @solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
    "http://localhost:8983/api/cluster/configs/myConfigSet/solrconfig.xml"

使用此 API 时,默认行为是覆盖 configset 中已存在的文件(如果存在)。可以使用参数 overwrite=false 禁用此行为,在这种情况下,如果文件已存在于 configset 中,请求将失败。

创建 Configset

create 命令基于先前上传的 configset 创建新的 configset。

如果您尚未上传任何 configset,请参阅上述 上传 Configset 命令。

创建 configset 时支持以下参数。

name

必需

默认值:无

要创建的 configset。

baseConfigSet

可选

默认值:_default

要作为基础进行复制的 configset 的名称。

configSetProp.property=value

可选

默认值:无

要覆盖在复制的 configset 中的基础 configset 的 configset 属性。

例如,要基于先前定义的 "predefinedTemplate" configset 创建名为 "myConfigset" 的 configset,并覆盖不可变属性为 false。

V1 API

使用 v1 API 时,create 命令必须大写为 CREATE

http://localhost:8983/solr/admin/configs?action=CREATE&name=myConfigSet&baseConfigSet=predefinedTemplate&configSetProp.immutable=false&wt=xml&omitHeader=true

V2 API

使用 v2 API 时,create 命令作为包含所需参数的 JSON 数据的一部分提供

curl -X POST -H 'Content-type: application/json' -d '{
  "create":{
    "name": "myConfigSet",
    "baseConfigSet": "predefinedTemplate",
    "configSetProp.immutable": "false"}}'
    http://localhost:8983/api/cluster/configs?omitHeader=true

使用 v2 API 时,还可以通过 properties 映射提供 configset 属性

curl -X POST -H 'Content-type: application/json' -d '{
  "create":{
    "name": "myConfigSet",
    "baseConfigSet": "predefinedTemplate",
    "properties": {
      "immutable": "false"
    }}}'
    http://localhost:8983/api/cluster/configs?omitHeader=true

输出

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">323</int>
  </lst>
</response>

删除 Configset

delete 命令删除 configset。它不会删除使用 configset 创建的任何集合。

name

必需

默认值:无

要删除的 configset。

要删除名为 "myConfigSet" 的 configset

V1 API

使用 v1 API 时,delete 命令必须大写为 DELETE。要删除的 configset 的名称通过 name 参数提供

http://localhost:8983/solr/admin/configs?action=DELETE&name=myConfigSet&omitHeader=true

V2 API

使用 v2 API 时,delete 命令作为请求方法提供,如 -X DELETE。要删除的 configset 的名称作为路径参数提供

curl -X DELETE http://localhost:8983/api/cluster/configs/myConfigSet?omitHeader=true

输出

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">170</int>
  </lst>
</response>