Configsets API

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

Configsets 是配置文件的集合,例如 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 只能在 Solr 以 SolrCloud 模式运行时使用。如果您未在 SolrCloud 模式下运行 Solr 但仍希望使用共享配置,请参阅 Configsets 部分。

该 API 的工作方式是将命令传递到 configs 端点。端点的路径因使用的 API 而异:v1 API 使用 solr/admin/configs,而 v2 API 使用 api/cluster/configs。下面提供了两种类型的示例。

列出 Configsets

list 命令会获取可用于集合创建的 configset 名称。

  • V1 API

  • V2 API

对于 v1 API,list 命令必须大写为 LIST

https://127.0.0.1:8983/solr/admin/configs?action=LIST&omitHeader=true

对于 v2 API,当请求未发送任何数据时,会隐含 list 命令。

https://127.0.0.1:8983/api/cluster/configs?omitHeader=true

输出将如下所示:

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

上传 Configset

上传一个配置集,它以压缩文件的形式发送。也可以使用 filePath 参数上传单个非压缩文件。

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

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

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

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

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

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

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

upload 命令接受以下参数

name

必需

默认值:无

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

overwrite

可选

默认值:请参阅描述

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

cleanup

可选

默认值:false

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

filePath

可选

默认值:无

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

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

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

  • V1 API

  • V2 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 "https://127.0.0.1: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 @- "https://127.0.0.1:8983/solr/admin/configs?action=UPLOAD&name=myConfigSet"

使用 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
    "https://127.0.0.1:8983/api/cluster/configs/myConfigSet"

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

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

  • V1 API

  • V2 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
    "https://127.0.0.1:8983/solr/admin/configs?action=UPLOAD&name=myConfigSet&filePath=solrconfig.xml&overwrite=true"

使用 v2 API 时,配置集和文件的名称都在 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
    "https://127.0.0.1:8983/api/cluster/configs/myConfigSet/solrconfig.xml"

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

创建配置集

create 命令基于先前上传的配置集创建新的配置集。

如果您尚未上传任何配置集,请参阅上面的 上传配置集 命令。

创建配置集时支持以下参数。

name

必需

默认值:无

要创建的配置集。

baseConfigSet

可选

默认值:_default

要复制作为基础的配置集的名称。

configSetProp.property=value

可选

默认值:无

要覆盖复制的配置集中的基础配置集的配置集属性。

例如,要基于先前定义的 "predefinedTemplate" 配置集创建名为 "myConfigset" 的配置集,并将 immutable 属性覆盖为 false。

  • V1 API

  • V2 API

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

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

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

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

使用 v2 API 时,也可以通过 properties 映射提供配置集属性

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

输出

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

删除配置集

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

name

必需

默认值:无

要删除的配置集。

要删除名为 "myConfigSet" 的配置集

  • V1 API

  • V2 API

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

https://127.0.0.1:8983/solr/admin/configs?action=DELETE&name=myConfigSet&omitHeader=true

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

curl -X DELETE https://127.0.0.1:8983/api/cluster/configs/myConfigSet?omitHeader=true

输出

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