配置文件中的属性替换

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

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