配置 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>
将配置自定义的 admin 处理程序 (MyAdminHandler) 来处理 admin 请求。如果未设置此属性,Solr 将使用默认的 admin 处理程序
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>
定义自定义操作后,可以使用其名称调用它们
http://localhost:8983/solr/admin/cores?action=foo
collectionsHandler
-
可选
默认值:
org.apache.solr.handler.admin.CollectionsHandler
如上所述,适用于自定义 CollectionsHandler 实现。
infoHandler
-
可选
默认值:
org.apache.solr.handler.admin.InfoHandler
如上所述,适用于自定义 InfoHandler 实现。
coreLoadThreads
-
可选
默认值:无
指定将分配给并行加载内核的线程数。
replayUpdatesThreads
-
可选
默认值:请参见说明
指定将分配给并行重放更新的线程数。此池由节点的所有内核共享。默认值等于处理器数量。
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
。 模块
-
可选
默认值:无
allowPaths
-
可选
默认值:无
Solr 通常只访问相对于
$SOLR_HOME
、$SOLR_DATA_HOME
或coreRootDir
的文件夹。如果您需要(例如)在这些路径之外创建内核,您可以使用allowPaths
明确允许该路径。它是一个逗号分隔的允许文件系统路径的字符串。特殊值*
将允许系统上的任何路径。
allowUrls
-
可选
默认值:请参见说明
允许的 Solr 主机的逗号分隔列表。
可以省略 HTTP/HTTPS 协议,并且只检查主机和端口,即
10.0.0.1:8983/solr,10.0.0.1:8984/solr
。当以用户管理集群的方式运行 Solr 并使用
shards
参数时,需要将主机列表明确配置为允许,否则 Solr 将禁止该请求。在 SolrCloud 模式中,允许列表会自动配置为包括集群中的所有活动节点。
允许列表也可以使用
solr.in.sh
/solr.in.cmd
中的solr.allowUrls
系统属性进行配置。如果您需要出于向后兼容性的目的禁用此功能,您可以设置系统属性solr.disable.allowUrls=true
。 hideStackTrace
-
可选
默认值:无
当此属性设置为
true
时,在出现错误的情况下,Solr 不会在 HTTP 响应中返回任何堆栈跟踪。默认情况下(false
),堆栈跟踪仅对可预测的 Solr 异常隐藏,但会在响应中返回意外异常(即:HTTP 500) shareSchema
-
可选
默认值:无
当此属性设置为
true
时,确保指向同一架构资源文件的多个内核将引用同一 IndexSchema 对象。共享 IndexSchema 对象可以加快内核加载速度。如果您使用此功能,请确保在架构文件中未使用任何内核特定属性。 transientCacheSize
-
可选
默认值:无
9.2 起已弃用。定义在卸载一个未使用的内核以供需要的内核使用之前,可以加载多少个
transient=true
的 Solr 内核。 configSetBaseDir
-
可选
默认值:
$SOLR_HOME/configsets
可以在其下找到 Solr 内核的配置集的目录。
maxBooleanClauses
-
可选
默认值:请参见说明
设置任何查询中允许的最大(嵌套)子句数。
此全局限制对针对任何集合的任何查询中允许的子句总数提供了一个安全约束——无论这些子句是在查询字符串中明确指定的,还是基于索引中的术语从更复杂的查询类型进行查询扩展/重写的结果。此限制在 Lucene 的多个点强制执行,既可以防止以可能耗尽 JVM 堆的方式使用过多的子句构造原始查询对象(主要是
BooleanQuery
),还可以确保没有复合查询(由多个原始查询组成)可以执行过多的总嵌套子句,从而可能导致搜索线程使用过多的 CPU。在默认配置中,此属性使用
solr.max.booleanClauses
系统属性的值(如果已指定)。这是_default
配置集中用于solrconfig.xml
的<maxBooleanClauses>
元素的同一系统属性,使 Solr 管理员可以轻松地增加两个值(在所有集合中),而无需搜索和更新所有配置。<maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
<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
(毫秒)足以解决冲突;如果 SolrCloud 中有数百或数千个小型集合,则可能需要增加此值。 zkClientTimeout
-
可选
默认值:无
连接到 ZooKeeper 服务器的超时时间。它与 SolrCloud 一起使用。
zkHost
-
可选
默认值:无
在 SolrCloud 模式下,Solr 应为群集状态信息使用的 ZooKeeper 主机的 URL。
genericCoreNodeNames
-
可选
默认值:无
如果为
true
,节点名称不基于节点的地址,而是基于标识核心的通用名称。当不同的计算机接管为该核心提供服务时,理解起来会容易得多。 zkCredentialsProvider
、zkACLProvider
和zkCredentialsInjector
-
可选
默认值:无
如果您使用的是 ZooKeeper 访问控制,则可以指定可选参数。
distributedClusterStateUpdates
-
可选
默认值:无
如果为
true
,SolrCloud 的内部行为将更改为不使用 Overseer 进行集合的state.json
更新,而是直接针对 ZooKeeper 进行更新。 minStateByteLenForCompression
-
可选
默认值:-1
可选参数,用于启用通过网络压缩 state.json 并存储在 Zookeeper 中。提供的值是压缩 state.json 的最小字节长度,即任何大于该字节大小的 state.json 都将被压缩。默认值为 -1,表示 state.json 始终未压缩。
stateCompressor
-
可选
默认值:org.apache.solr.common.util.ZLibCompressor
可选参数,用于为通过网络压缩 state.json 并存储在 Zookeeper 中提供压缩实现。提供的值是用于状态压缩的类。仅当 minStateByteLenForCompression 设置为大于 -1 的值时才使用此值。
<logging> 元素
class
-
可选
默认值:无
用于记录的类。相应的 JAR 文件必须可供 Solr 使用,可能通过
solrconfig.xml
中的<lib>
指令使用。 enabled
-
可选
默认值:
true
是否启用记录。
<shardHandlerFactory> 元素
如果您希望创建自定义分片处理程序,可以在 solr.xml
中定义自定义分片处理程序。
<shardHandlerFactory name="ShardHandlerFactory" class="qualified.class.name">
由于这是一个自定义分片处理程序,因此子元素特定于实现。Solr 提供的默认且唯一的 shard 处理程序是 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
请求参数为每个请求指定副本路由(覆盖默认值)。如果请求同时包含 dividend
和 hash
,则 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)
从应用程序代码访问这些节点级缓存。
请注意,由于节点级缓存存在于单个核心的上下文之上,因此连接到核心/搜索器的生命周期的配置参数(例如 autowarmCount
和 regenerator
)与节点级缓存无关/被忽略。
<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
文件中,socketTimeout
和 connTimeout
值都设置为“60000”。但是,如果您使用 bin/solr -DsocketTimeout=1000
启动 Solr,则 HttpShardHandlerFactory
的 socketTimeout
选项将被覆盖,使用 1000ms 的值,而 connTimeout
选项将继续使用“60000”的默认属性值。
<solr>
<shardHandlerFactory name="shardHandlerFactory"
class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:60000}</int>
<int name="connTimeout">${connTimeout:60000}</int>
</shardHandlerFactory>
</solr>