配置集 API
Configsets API 使您能够将新的 configset 上传到 ZooKeeper,在 Solr 运行 SolrCloud 模式时创建和删除 configset。
Configset 是一个配置文件集合,例如 solrconfig.xml
、synonyms.txt
、模式、特定语言的文件以及其他集合级配置文件(通常位于 conf
目录中的所有内容)。Solr 附带两个示例 configset(_default
和 sample_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>