配置文件中的属性替换
Solr 支持在配置文件中进行属性值的变量替换,这允许在 solrconfig.xml
中运行时指定各种配置选项。
语法为 ${propertyname[:可选默认值]}
。这允许定义一个默认值,该默认值可以在 Solr 启动时被覆盖。如果未指定默认值,则必须在运行时指定该属性,否则配置文件在解析时会生成错误。
有多种方法可以指定可在配置文件中使用的属性。在下面的方法中,强烈建议将“配置覆盖”作为首选方法,因为它保留在 configset 本地,并且易于修改。
JVM 系统属性
任何 JVM 系统属性都可以用作 Solr 中任何 XML 配置文件中的变量。例如,在示例 solrconfig.xml
文件中,您将看到此值,它定义了要使用的锁定类型
<lockType>${solr.lock.type:native}</lockType>
这意味着锁定类型默认为“native”,但在启动 Solr 时,您可以使用 JVM 系统属性通过使用以下命令启动 Solr 来覆盖此值
bin/solr start -Dsolr.lock.type=none
通常,您想要设置的任何 Java 系统属性都可以使用标准的 -Dproperty=value
语法通过 bin/solr
脚本传递。
Solr 还会自动将任何以 SOLR_
开头的环境变量映射到系统属性,方法是将名称转换为小写并将下划线替换为 .
。这意味着使用 SOLR_LOCK_TYPE=none
启动 Solr(或在 solr.in.sh
或 solr.in.cmd
中设置它)将与前面的示例具有相同的效果。
或者,您可以将常用的系统属性添加到 Solr 包含文件(bin/solr.in.sh
或 bin/solr.in.cmd
)中定义的 SOLR_OPTS
环境变量。有关 Solr 包含文件如何工作的更多信息,请参阅:将 Solr 用于生产环境。
配置 API 来覆盖 solrconfig.xml
Config API 允许您使用 API 修改 Solr 的配置,特别是用户定义的属性。使用此 API 所做的更改将存储在名为 configoverlay.json
的文件中。此文件只能通过 API 编辑,但看起来会像以下示例
{
"userProps":{"update.autoCreateFields":"false"},
"requestHandler":{"/myterms":{
"name":"/myterms",
"class":"solr.SearchHandler",
"defaults":{
"terms":true,
"distrib":false},
"components":["terms"]}}}
有关更多详细信息,请参阅 Config API 部分。
core.properties 中的用户定义属性
每个 Solr 核心都有一个 core.properties
文件,在使用 API 时会自动创建。当您创建 SolrCloud 集合时,可以通过将参数名称加上 property.name
作为参数来传递自定义参数。
例如,要添加一个名为“my.custom.prop”的属性
-
V1 API
-
V2 API
https://127.0.0.1:8983/solr/admin/collections?action=CREATE&name=gettingstarted&numShards=1&property.my.custom.prop=edismax
curl -X POST -H 'Content-type: application/json' -d '{"name": "gettingstarted", "numShards": 1, "properties": {"my.custom.prop": "edismax"}}' https://127.0.0.1:8983/api/collections
这将创建一个 core.properties
文件,其中至少包含以下属性(为简洁起见,省略了其他属性)
#core.properties
name=gettingstarted
my.custom.prop=edismax
然后,my.custom.prop
属性可以用作变量,例如在 solrconfig.xml
中。
<requestHandler name="/select">
<lst name="defaults">
<str name="defType">${my.custom.prop}</str>
</lst>
</requestHandler>
隐式核心属性
Solr 核心的几个属性可以作为“隐式”属性使用,这些属性可以用于变量替换,而无需考虑底层值的初始化位置或方式。
例如,无论特定 Solr 核心的名称是在 core.properties
中显式配置,还是从实例目录的名称中推断出来,隐式属性 solr.core.name
都可以在该核心的配置文件中用作变量。
<requestHandler name="/select">
<lst name="defaults">
<str name="collection_name">${solr.core.name}</str>
</lst>
</requestHandler>
所有隐式属性都使用 solr.core.
名称前缀,并反映等效的 core.properties
属性的运行时值。
-
solr.core.name
-
solr.core.config
-
solr.core.schema
-
solr.core.dataDir
-
solr.core.transient
-
solr.core.loadOnStartup