配置文件中的属性替换
Solr 支持在配置文件中对属性值进行变量替换,这允许在 solrconfig.xml
中对各种配置选项进行运行时指定。
语法为 ${propertyname[:option default value]
}。这允许定义一个默认值,该默认值可以在启动 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 include 文件(bin/solr.in.sh
或 bin/solr.in.cmd
)中定义的 SOLR_OPTS
环境变量中。有关 Solr include 文件工作原理的更多信息,请参阅:将 Solr 投入生产。
Config 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
http://localhost:8983/solr/admin/collections?action=CREATE&name=gettingstarted&numShards=1&property.my.custom.prop=edismax
V2 API
curl -X POST -H 'Content-type: application/json' -d '{"name": "gettingstarted", "numShards": 1, "properties": {"my.custom.prop": "edismax"}}' http://localhost: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