Configsets API
Configsets API 使您能够在 Solr 以 SolrCloud 模式运行时,将新的 configset 上传到 ZooKeeper,创建和删除 configset。
Configsets 是配置文件的集合,例如 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 只能在 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>