配置 solr.xml

solr.xml 文件定义了一些适用于所有或许多核心的全局配置选项。

本节将描述 Solr 附带的默认 solr.xml 文件,以及如何根据您的需要修改它。有关如何配置 core.properties 的详细信息,请参阅 核心发现 部分。

定义 solr.xml

您可以在 $SOLR_HOME 目录(通常是 server/solr/var/solr/data)中找到 solr.xml,或者在使用 SolrCloud 时可以选择在 ZooKeeper 中找到。如果未找到 $SOLR_HOME/solr.xml,Solr 将使用默认的 solr.xml 文件。

从 Zookeeper 加载 solr.xml 已被弃用,并且在未来的版本中将不再支持。作为 Solr 的节点配置,此文件必须在早期启动时可用,并且允许在节点之间有所不同。

默认的 solr.xml 文件位于 $SOLR_TIP/server/solr/solr.xml 中,如下所示:

<solr>

  <int name="maxBooleanClauses">${solr.max.booleanClauses:1024}</int>
  <str name="sharedLib">${solr.sharedLib:}</str>
  <str name="modules">${solr.modules:}</str>
  <str name="allowPaths">${solr.allowPaths:}</str>
  <str name="allowUrls">${solr.allowUrls:}</str>
  <str name="hideStackTrace">${solr.hideStackTrace:false}</str>

  <solrcloud>

    <str name="host">${host:}</str>
    <int name="hostPort">${solr.port.advertise:0}</int>
    <str name="hostContext">${hostContext:solr}</str>

    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>

    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
    <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
    <str name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider}</str>
    <str name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str>
    <str name="zkCredentialsInjector">${zkCredentialsInjector:org.apache.solr.common.cloud.DefaultZkCredentialsInjector}</str>
    <bool name="distributedClusterStateUpdates">${distributedClusterStateUpdates:false}</bool>
    <bool name="distributedCollectionConfigSetExecution">${distributedCollectionConfigSetExecution:false}</bool>
    <int name="minStateByteLenForCompression">${minStateByteLenForCompression:-1}</int>
    <str name="stateCompressor">${stateCompressor:org.apache.solr.common.util.ZLibCompressor}</str>

  </solrcloud>

  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:600000}</int>
    <int name="connTimeout">${connTimeout:60000}</int>
  </shardHandlerFactory>

  <metrics enabled="${metricsEnabled:true}">
    <!--reporter name="jmx_metrics" group="core" class="org.apache.solr.metrics.reporters.SolrJmxReporter"/-->
  </metrics>

</solr>

如您所见,发现 Solr 配置是“SolrCloud 友好”的。但是,<solrcloud> 元素的存在并意味着 Solr 实例正在以 SolrCloud 模式运行。除非在启动时指定了 -DzkHost-DzkRun,否则将忽略此部分。

Solr.xml 参数

<solr> 元素

您不能在 <solr> 标签(它是 solr.xml 的根元素)中指定任何属性。下表列出了 solr.xml 中每个 XML 元素的子节点。

configSetService

可选

默认值: configSetService

此属性不需要设置。

如果使用,此属性应设置为继承自 ConfigSetService 的类的 FQN (完全限定名称),并且您必须提供一个类型为 org.apache.solr.core.CoreContainer 的参数的构造函数。例如,<str name="configSetService">com.myorg.CustomConfigSetService</str>

如果未设置此属性,Solr 将使用默认的 configSetService,其中 zookeeper 知道 org.apache.solr.cloud.ZkConfigSetService,而 zookeeper 不知道 org.apache.solr.core.FileSystemConfigSetService

adminHandler

可选

默认值: org.apache.solr.handler.admin.CoreAdminHandler

此属性不需要设置。

如果使用,此属性应设置为继承自 CoreAdminHandler 的类的 FQN(完全限定名称)。例如,<str name="adminHandler">com.myorg.MyAdminHandler</str> 将配置自定义管理员处理程序 (MyAdminHandler) 来处理管理员请求。

如果未设置此属性,Solr 将使用默认的管理员处理程序,org.apache.solr.handler.admin.CoreAdminHandler

coreAdminHandlerActions

可选

默认值: 无

此属性不需要设置。

如果已定义,它应包含要在 CoreAdminHandler 中注册的自定义操作列表。列表中的每个条目都应为 str 类型,其中条目的名称定义操作的名称,而值是继承自 CoreAdminOp 的操作类的 FQN (完全限定名称)。

例如,可以像这样定义操作:

  <coreAdminHandlerActions>
    <str name="foo">com.example.FooAction</str>
    <str name="bar">com.example.BarAction</str>
  </coreAdminHandlerActions>

定义自定义操作后,可以使用其名称来调用它们:

https://127.0.0.1:8983/solr/admin/cores?action=foo
collectionsHandler

可选

默认值: org.apache.solr.handler.admin.CollectionsHandler

如上所述,用于自定义 CollectionsHandler 实现。

infoHandler

可选

默认值: org.apache.solr.handler.admin.InfoHandler

如上所述,用于自定义 InfoHandler 实现。

coreLoadThreads

可选

默认值: 无

指定将分配用于并行加载核心的线程数。

replayUpdatesThreads

可选

默认值: 请参阅描述

指定将分配用于并行重放更新的线程数。此池由节点的所有核心共享。默认值等于处理器数。

indexSearcherExecutorThreads

可选

默认值: 可用处理器数量

指定将分配用于搜索查询的线程数。

coreRootDirectory

可选

默认值: server/solr

核心发现树的根目录,默认为 $SOLR_HOME

coresLocator

可选

默认值: org.apache.solr.core.CorePropertiesLocator

此属性不需要设置。

如果使用此属性,则应将其设置为实现 CoresLocator 接口的类的 FQN(完全限定名称),并且您必须提供一个类型为 org.apache.solr.core.NodeConfig 的参数的构造函数。例如,<str name="coresLocator">com.myorg.CustomCoresLocator</str> 将配置一个自定义内核定位器。

coreSorter

可选

默认值:org.apache.solr.core.CoreSorter

此属性不需要设置。

如果使用此属性,则应将其设置为实现 CoreSorter 接口的类的 FQN(完全限定名称),并且您必须提供一个类型为 org.apache.solr.core.CoreContainer 的参数的构造函数。此服务在 Solr 启动时用于确定应首先加载哪些内核的优先级。例如,<str name="coresLocator">com.myorg.CustomCoresLocator</str> 将配置一个自定义内核排序器。

managementPath

可选

默认值: 无

当前不可操作。

sharedLib

可选

默认值: 无

指定将跨所有内核共享的公共库目录的路径。此目录中的任何 JAR 文件都将添加到 Solr 插件的搜索路径中。如果指定的路径不是绝对路径,则它将相对于 $SOLR_HOME。自定义处理程序可以放置在此目录中。请注意,指定 sharedLib 不会从 Solr 的类路径中删除 $SOLR_HOME/lib

modules

可选

默认值: 无

获取一个要启动时启用的捆绑的 Solr 模块列表。这种添加模块的方式会将其添加到共享类加载器中,使其可用于 Solr 中的每个集合,这与 solrconfig.xml 中的 <lib> 标签不同,后者仅适用于该集合。示例值:extracting,ltr。有关更多详细信息,请参见 Solr 模块章节。

allowPaths

可选

默认值: 无

Solr 通常只会访问相对于 $SOLR_HOME$SOLR_DATA_HOMEcoreRootDir 的文件夹。例如,如果您需要在这些路径之外创建一个内核,则可以使用 allowPaths 显式允许该路径。它是一个以逗号分隔的文件系统路径字符串。特殊值 * 将允许系统上的任何路径。

allowUrls

可选

默认值: 请参阅描述

以逗号分隔的允许的 Solr 主机列表。

可以省略 HTTP/HTTPS 协议,并且仅检查主机和端口,例如 10.0.0.1:8983/solr,10.0.0.1:8984/solr

当以用户托管集群运行 Solr 并使用 shards 参数时,需要专门配置一个允许的主机列表,否则 Solr 将禁止该请求。

在 SolrCloud 模式下,允许列表会自动配置为包含集群中的所有活动节点。

允许列表也可以使用 solr.allowUrls 系统属性在 solr.in.sh / solr.in.cmd 中进行配置。如果需要禁用此功能以实现向后兼容性,则可以设置系统属性 solr.disable.allowUrls=true

hideStackTrace

可选

默认值: 无

当此属性设置为 true 时,Solr 在发生错误时不会在 HTTP 响应中返回任何堆栈跟踪。默认情况下(false),堆栈跟踪仅对可预测的 Solr 异常隐藏,但对于意外异常(例如:HTTP 500)则会返回到响应中。

shareSchema

可选

默认值: 无

当此属性设置为 true 时,确保指向同一 Schema 资源文件的多个内核将引用同一 IndexSchema 对象。共享 IndexSchema 对象可以加快加载内核的速度。如果使用此功能,请确保在 Schema 文件中未使用任何特定于内核的属性。

transientCacheSize

可选

默认值: 无

从 9.2 版本开始已弃用。 定义在卸载未使用的内核并加载所需的内核之前可以加载多少个 transient=true 的 Solr 内核。

configSetBaseDir

可选

默认值:$SOLR_HOME/configsets

可以在其中找到 Solr 内核配置集的目录。

maxBooleanClauses

可选

默认值: 请参阅描述

设置任何查询中允许的最大(嵌套)子句数。

此全局限制对针对任何集合的任何查询中允许的子句总数提供了安全约束——无论这些子句是在查询字符串中明确指定的,还是由于基于索引中的术语的更复杂的查询类型的查询扩展/重写的结果。此限制在 Lucene 中的多个点强制执行,既可以防止使用过多的子句以可能耗尽 JVM 堆的方式构建原始查询对象(主要是 BooleanQuery),也可以确保没有复合查询(由多个原始查询组成)可以以可能导致搜索线程使用过多 CPU 的方式执行具有过多的嵌套子句总数的查询。

在默认配置中,如果指定了 solr.max.booleanClauses 系统属性,则此属性使用该属性的值。这与 solrconfig.xml<maxBooleanClauses> 元素_default 配置集使用的系统属性相同,这使得 Solr 管理员可以轻松地增加两个值(在所有集合中),而无需搜索和更新所有配置。

<maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
hiddenSysProps

可选

默认值: 请参阅描述

以逗号分隔的正则表达式模式列表,用于匹配应被编辑以隐藏敏感信息的 sysProps。

允许列表也可以通过 solr.hiddenSysProps 系统属性或 SOLR_HIDDEN_SYS_PROPS 环境变量进行配置。

默认情况下,Solr 将隐藏所有 basicAuth、AWS、ZK 或 SSL 密钥 sysProps。它还将隐藏任何包含“password”或“secret”的 sysProp。

<solrcloud> 元素

此元素定义了与 SolrCloud 相关的几个参数。除非 Solr 实例使用 -DzkRun-DzkHost 启动,否则将忽略此部分。

distribUpdateConnTimeout

可选

默认值: 无

用于设置集群内更新的底层 connTimeout

distribUpdateSoTimeout

可选

默认值: 无

用于设置集群内更新的底层 socketTimeout

host

可选

默认值: 无

Solr 用于访问内核的主机名。

hostContext

可选

默认值: 无

URL 上下文路径。

hostPort

可选

默认值:${solr.port.advertise:0}

Solr 用于访问内核的端口,并通过 liveNodes 公布 Solr 节点位置。仅当 Solr 实例侦听的端口与希望其他节点与其联系的端口不同时,此选项才是必要的。例如,如果 Solr 节点在代理后面或在允许端口映射的云环境(例如 Kubernetes)中运行。hostPort 是 Solr 实例希望其他节点与其联系的端口。

在默认的 solr.xml 文件中,此值设置为 ${solr.port.advertise:0}。如果没有通过 solr.xml 传递端口(即 0),则 Solr 将默认使用 jetty 正在侦听的端口,该端口由 ${jetty.port} 定义。

leaderVoteWait

可选

默认值: 无

当 SolrCloud 启动时,每个 Solr 节点在假设任何未报告的节点已关闭之前,将等待多久以查找该分片的所有已知副本。

leaderConflictResolveWait

可选

默认值:180000 毫秒

当尝试为分片选举领导者时,此属性设置副本等待看到冲突状态信息被解决的最大时间;在执行滚动重启时,尤其是在重启托管 Overseer 的节点时,可能会发生状态信息的临时冲突。

通常,默认值 180000 (ms) 足以解决冲突;如果 SolrCloud 中有成百上千的小型集合,则可能需要增加此值。

zkClientTimeout

可选

默认值: 无

与 ZooKeeper 服务器连接的超时时间。它与 SolrCloud 一起使用。

zkHost

可选

默认值: 无

在 SolrCloud 模式下,ZooKeeper 主机的 URL,Solr 应使用该主机获取集群状态信息。

genericCoreNodeNames

可选

默认值: 无

如果为 true,则节点名称不是基于节点的地址,而是基于标识内核的通用名称。当不同的机器接管服务该内核时,事情将更容易理解。

zkCredentialsProviderzkACLProvider & zkCredentialsInjector

可选

默认值: 无

如果您使用 ZooKeeper 访问控制,则可以指定可选参数。

distributedClusterStateUpdates

可选

默认值: 无

如果为 true,则更改 SolrCloud 的内部行为,使其不使用 Overseer 进行集合的 state.json 更新,而是直接针对 ZooKeeper 执行此操作。

minStateByteLenForCompression

可选

默认值:-1

可选参数,用于启用通过线路传输和存储在 Zookeeper 中的 state.json 压缩。提供的值是要压缩 state.json 的最小字节长度,即,任何大于该大小的字节的 state.json 都将被压缩。默认值为 -1,表示 state.json 始终未压缩。

stateCompressor

可选

默认值:org.apache.solr.common.util.ZLibCompressor

可选参数,用于为通过线路传输和存储在 Zookeeper 中的 state.json 提供压缩实现。提供的值是用于状态压缩的类。仅当 minStateByteLenForCompression 设置为高于 -1 的值时才使用此参数。

<logging> 元素

class

可选

默认值: 无

用于日志记录的类。对应的 JAR 文件必须对 Solr 可用,可以通过 solrconfig.xml 中的 <lib> 指令来实现。

enabled

可选

默认值:true

是否启用日志记录。

<logging><watcher> 元素

size

可选

默认值:50

缓冲的日志事件数。

threshold

可选

默认值: 无

特定日志记录实现将记录的日志级别。例如,当使用 Log4j 时,可以指定 DEBUG、WARN、INFO 等。

<shardHandlerFactory> 元素

如果您希望创建自定义分片处理程序,则可以在 solr.xml 中定义自定义分片处理程序。

<shardHandlerFactory name="ShardHandlerFactory" class="qualified.class.name">

由于这是一个自定义分片处理程序,因此子元素特定于实现。Solr 提供的默认且唯一的分片处理程序是 HttpShardHandlerFactory,在这种情况下,可以指定以下子元素

socketTimeout

可选

默认值: 请参阅描述

集群内查询和管理请求的读取超时时间。默认值与 <solrcloud> 部分中指定的 distribUpdateSoTimeout 相同。

connTimeout

可选

默认值: 请参阅描述

集群内查询和管理请求的连接超时时间。默认值为 <solrcloud> 部分中指定的 distribUpdateConnTimeout

urlScheme

可选

默认值: 无

在分布式搜索中使用的 URL 方案。

maxConnectionsPerHost

可选

默认值:100000

每个主机允许的最大连接数。

corePoolSize

可选

默认值:0

服务请求的线程池的初始核心大小。

maximumPoolSize

可选

默认值: 无

服务请求的线程池的最大大小。默认值是无限的。

maxThreadIdleTime

可选

默认值:5

空闲线程在队列中持续存在的时间(以秒为单位),然后被终止。

sizeOfQueue

可选

默认值: 无

如果线程池使用后备队列,则使用直接移交的最大大小。默认值是使用 SynchronousQueue。

fairnessPolicy

可选

默认值:false

一个布尔值,用于配置线程池是否优先考虑公平性而不是吞吐量。

replicaRouting

可选

默认值: 请参阅描述

一个 NamedList,用于指定副本路由偏好配置。它可用于选择和配置副本路由偏好。可以使用 default=true 设置默认的基础副本路由偏好。只有正向的默认状态断言才会被考虑;也就是说,default=false 不起作用。如果没有配置显式的默认基础副本路由偏好,则隐式默认值为 random

<shardHandlerFactory class="HttpShardHandlerFactory">
  <lst name="replicaRouting">
    <lst name="stable">
      <bool name="default">true</bool>
      <str name="dividend">routingDividend</str>
      <str name="hash">q</str>
    </lst>
  </lst>
</shardHandlerFactory>

副本路由也可以通过 shards.preference 请求参数在每个请求中指定(覆盖默认值)。如果请求同时包含 dividendhash,则 dividend 在路由时具有更高的优先级。对于配置 stable 路由,hash 参数隐式默认为主查询参数(即 q)的字符串值的哈希值。

+ 必须显式配置 dividend 参数;没有隐式默认值。如果只需要 dividend 路由,则可以将 hash 显式设置为空字符串,完全禁用基于哈希的隐式路由。

<replicaPlacementFactory> 元素

可以在 solr.xml 中定义默认的 副本放置插件。要允许这样做,必须将 solr.cluster.plugin.edit.enabled 系统属性设置为 false。此设置将禁用 /cluster/plugins 编辑 API,防止在运行时修改集群插件。

<replicaPlacementFactory class="org.apache.solr.cluster.placement.plugins.AffinityPlacementFactory">
  <int name="minimalFreeDiskGB">10</int>
  <int name="prioritizedFreeDiskGB">200</int>
</replicaPlacementFactory>

class 属性应设置为扩展 PlacementPluginFactory 的类的 FQN(完全限定名称)。子元素特定于实现。

<clusterSingleton> 元素

可以在 solr.xml 中声明一个或多个 clusterSingleton 元素。要允许这样做,必须将 solr.cluster.plugin.edit.enabled 系统属性设置为 false。此设置将禁用 /cluster/plugins 编辑 API,防止在运行时修改集群插件。

每个 clusterSingleton 元素都指定一个在 Solr 启动时应加载的集群插件,以及其关联的配置。

<clusterSingleton name="pluginName" class="qualified.plugin.class">
  <int name="value1">20</int>
</clusterSingleton>

name 属性是必需的,并且对于每个 clusterSingleton 必须是唯一的。

class 属性应设置为扩展 ClusterSingleton 的类的 FQN(完全限定名称)。子元素特定于实现,此处提供了 value1 作为示例。

<metrics> 元素

solr.xml 中的 <metrics> 元素允许您自定义 Solr 报告的指标。您可以定义不应返回的系统属性,或定义自定义的供应商和报告器。

如果您想为您的安装自定义指标,请参阅指标配置部分。

<caches> 元素

solr.xml 中的 <caches> 元素支持定义和配置命名的节点级缓存。

这些缓存类似于 solrconfig.xml 中的用户定义缓存,不同之处在于,每个命名的缓存都作为节点级别的长期存在的单例存在。这些节点级缓存可以通过 CoreContainer.getCache(String cacheName) 从应用程序代码访问。

请注意,由于节点级缓存存在于单个核心的上下文之上,因此连接到核心/搜索器生命周期的配置参数(例如 autowarmCountregenerator)对于节点级缓存是不相关/被忽略的。

<solr>
  <caches>
    <cache name="myNodeLevelUserCache"
           class="solr.CaffeineCache"
           size="4096"
           initialSize="1024" />
  </caches>
</solr>

在 solr.xml 中替换 JVM 系统属性

Solr 支持在 solr.xml 中进行 JVM 系统属性值的变量替换,这允许在运行时指定各种配置选项。语法为 ${propertyname[:option default value]}。这允许定义一个默认值,可以在 Solr 启动时被覆盖。如果未指定默认值,则必须在运行时指定该属性,否则在解析时 solr.xml 文件将生成错误。

通常在使用启动 JVM 时使用 -D 标志指定的任何 JVM 系统属性,都可以在 solr.xml 文件中用作变量。

例如,在下面显示的 solr.xml 文件中,socketTimeoutconnTimeout 值均设置为“60000”。但是,如果您使用 bin/solr start -DsocketTimeout=1000 启动 Solr,则可以使用 1000 毫秒的值覆盖 HttpShardHandlerFactorysocketTimeout 选项,而 connTimeout 选项将继续使用默认属性值“60000”。

<solr>
  <shardHandlerFactory name="shardHandlerFactory"
                       class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:60000}</int>
    <int name="connTimeout">${connTimeout:60000}</int>
  </shardHandlerFactory>
</solr>