配置文件中的属性替换

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.shsolr.in.cmd 中设置它)将与前面的示例具有相同的效果。

或者,您可以将常用的系统属性添加到 Solr 包含文件(bin/solr.in.shbin/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