配置 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
-
可选
默认值: 无
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.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>
<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
,则节点名称不是基于节点的地址,而是基于标识内核的通用名称。当不同的机器接管服务该内核时,事情将更容易理解。 zkCredentialsProvider
、zkACLProvider
&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
是否启用日志记录。
<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
请求参数在每个请求中指定(覆盖默认值)。如果请求同时包含 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 start -DsocketTimeout=1000
启动 Solr,则可以使用 1000 毫秒的值覆盖 HttpShardHandlerFactory
的 socketTimeout
选项,而 connTimeout
选项将继续使用默认属性值“60000”。
<solr>
<shardHandlerFactory name="shardHandlerFactory"
class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:60000}</int>
<int name="connTimeout">${connTimeout:60000}</int>
</shardHandlerFactory>
</solr>