Solr 9 中的主要变更
Solr 9.0 是 Solr 的一个主要新版本。
此页面重点介绍了最重要的更改,包括新功能和默认行为的更改,以及先前已弃用但现在已删除的功能。
Solr 9 升级规划
在开始升级到 Solr 9 之前,请花时间查看有关从您当前使用的版本到 Solr 9 的所有更改信息。
您还应考虑您尚未升级到的任何版本中对 Solr 所做的所有更改。例如,如果您当前使用的是 Solr 8.1,则除了 9.0 的更改之外,还应查看所有后续 8.x 版本中所做的更改。
彻底查看早期 8.x 版本中的主要变更中的列表以及 Solr 实例中的CHANGES.txt 将有助于您规划迁移到 Solr 9 的过程。
升级先决条件
Solr 9 要求 Java 11 作为最低 Java 版本,并且还使用 Java 17 进行了测试。
如果使用 CloudSolrClient
连接到您的 SolrCloud 集群,则在将 SolrCloud 集群升级到 9.0 版本之前,必须在所有客户端应用程序中将 SolrJ 升级到 8.10 或更高版本 (8.x)。否则,SolrJ 将无法在集群升级到 Solr 9 后连接到该集群。
如果您的旧集合最初是使用 5.0 之前的 Solr 版本创建的,则 Solr 可能会将该集合的集群状态保留在 Zookeeper 根目录下的 /clusterstate.json
文件中。Solr 9 不再支持此文件。您必须在升级到 Solr 9 之前将此类集合升级到新的每个集合 state.json
格式。这可以通过在仍使用 Solr 8.x 时调用集合 API MIGRATESTATEFORMAT操作来完成。
如果您依赖于使用“master”或“slave”术语的 Solr KPI 指标、警报或监视器,请更新您的系统,以便这些指标现在以“leader”和“follower”术语显示。
滚动升级
如果您计划使用滚动升级模型(依次升级每个节点,而不是建立一个全新的 9.x 集群)来升级您的集群,请仔细阅读以下内容。
从 Solr 8 到 Solr 9 的滚动升级需要从 Solr 8.7 或更高版本升级。如果您运行的是 8.x 版本,早于 8.7,我们建议您首先升级到 8.11。
某些命令,例如集合的恢复,如果在升级期间执行,可能无法正确完成。可能需要在之后重新尝试。
PKI 身份验证
由 PKI 身份验证保护的节点间通信已更改格式。有关详细信息,请参阅 PKI 身份验证插件。
从 Solr 8 到 Solr 9 的滚动升级需要以下多次重启序列
-
升级到 Solr 9 并设置系统属性:
solr.pki.sendVersion=v1
和solr.pki.acceptVersions=v1,v2
。这将允许 Solr 9 节点在升级过程中向 Solr 8 节点发送消息。 -
使用
solr.pki.sendVersion=v2
(默认,可以不设置)和solr.pki.acceptVersions=v1,v2
重启。这将强制所有节点发送新的标头。 -
(可选)使用系统属性
solr.pki.acceptVersions=v2
(默认,可以不设置)重启,以防止过时的节点连接到您的集群。
升级后重新索引
强烈建议您在主要版本升级后完全重新索引您的文档。有关详细信息,请参阅 重新索引 部分,其中介绍了如何重新索引的几种策略。
在 Solr 8 中,可以通过 UninvertDocValuesMergePolicy
(一种高级/专家实用程序)在不重新索引的情况下向模式添加 docValues。由于 Lucene 9 中的更改,这不再可能。
Solr 9.7
SchemaVersion 升级到 1.7
默认的 schemaVersion 现在是 1.7。使用新的模式版本,大多数支持 docValues 的字段和 fieldTypes 将默认启用 docValues。有关完整列表,请参阅 启用 Doc Values 部分。
此外,默认情况下将无法反转字段。(uninvertible=false
)
为了从 schemaVersion 1.6 升级到 1.7,通常需要重新索引所有数据。此重新索引不能就地进行。 Lucene 不允许向现有字段添加 docValues。
但是,如果以下任何一项为真,则不需要重新索引
-
所有适用的字段在原始模式中已启用 docValues
-
模式更新为 显式禁用 docValues,适用于所有未提供显式
docValues
默认值的字段和 fieldTypes。
uninvertible=false
默认值对索引没有影响,因此与重新索引无关。
Solr 9.6
依赖项升级
Lucene 已升级到 9.10.0,并且各种库依赖项已升级。有关具体升级的库,请参阅 https://solr.apache.org/docs/9_6_0/changes/Changes.html。
Solr 9.5
依赖项升级
Solr 8.2 建议使用 Zookeeper 3.5.5,现在 Curator 5.5.0 需要 Zookeeper 3.5.x 或更高版本。这主要影响 hadoop-auth
的用户,但 Curator 的使用可能会影响 Solr 的其他部分。
全局断路器
-
现在可以全局配置断路器,而不仅仅是针对每个集合。有关更多信息,请参阅 配置断路器。
配置和易用性
-
Solr 现在将自动解析所有带有
SOLR_
前缀的环境变量,并设置相应的系统属性。这对于通过环境变量配置 Solr 的更多方面(例如容器)非常有用。下划线替换为点,字符串转换为小写。例如,以前您必须设置系统属性-Dsolr.clustering.enabled=true
才能启用集群,现在您可以设置等效的环境变量SOLR_CLUSTERING_ENABLED=true
来代替。 -
集合和副本属性现在可以用作配置文件(例如 solrconfig.xml)中的属性替换变量。
-
启用 TLS 后,Solr 现在会自动重新加载更新的密钥库和信任库文件。
-
跟踪支持已收到许多生活质量方面的改进,包括改进的分布式集合命令跟踪,以及增加了对使用 Apache 和 Jetty HTTP 客户端进行的内部请求的覆盖范围。
Solr 9.4
内置配置集
-
内置配置集(
_default
和sample_techproducts_configs
)现在使用 3 秒的默认autoSoftCommit
时间,这意味着文档将在上传后 3 秒内可搜索。有关此更改将如何影响您的更多信息,请参阅 软提交文档。升级具有自定义 configSets 的现有云和用例将不会受到此更改的影响。
副本放置
-
当使用 AffinityPlacementPlugin 时,默认的
minimalFreeDiskGB
值已从20GB
降低到5GB
。因此,当使用默认设置时,以前由于可用磁盘空间不足而被排除在副本放置之外的节点,可能会在升级后被选中。
嵌入式 Zookeeper
-
嵌入式 Zookeeper 现在可以配置为侦听(或绑定到)多个主机,而不仅仅是
localhost
,有关更多信息,请参阅 网络配置文档。
断路器
-
断路器现在是可插拔的,您可以定义多个断路器,包括自定义断路器。现有的
CircuitBreakerManager
已弃用,建议用户切换到新的插件。虽然旧的CircuitBreakerManager
在断路器跳闸时返回 HTTP 503,但新的插件返回 HTTP 429。
安全
-
自 Solr 8.4.1/8.5.0 以来,
solr.jetty.ssl.verifyClientHostName
sysProp 和SOLR_SSL_CLIENT_HOSTNAME_VERIFICATION
envVar 被错误地使用。它被用来覆盖HTTP2SolrClient
中的solr.ssl.checkPeerName
sysProp。这已得到修复,并且该设置再次告诉服务器在执行 mTLS 时检查原始客户端主机名是否与客户端证书匹配。默认情况下仍然启用此选项。 -
如果提供了
SOLR_SSL_CHECK_PEER_NAME
,则solr.jetty.ssl.sniHostCheck
选项现在默认为该值。这将使客户端和服务器主机名检查设置由相同的环境变量控制。如果用户想要单独的客户端/服务器设置,他们可以在SOLR_OPTS
中手动覆盖solr.jetty.ssl.sniHostCheck
选项。
弃用
-
已弃用
rid
请求 id 查询参数,改为使用始终启用的跟踪生成。要禁用rid
生成,请将系统属性solr.disableRequestId
设置为true
。要禁用始终启用的跟踪生成,请将系统属性solr.alwaysOnTraceId
设置为false
。
Solr 9.3
分片管理
-
Solr 现在提供了一个 “安装分片” API,允许已离线构建(每个分片)索引的用户将其导入到 SolrCloud 分片中。
安全
-
不再通过 solrconfig.xml 中的配置或使用配置 API 的动态等效项来启用
stream.file
、stream.url
和stream.body
参数的使用。旧的配置现在不起作用。相反,请设置环境变量:SOLR_ENABLE_REMOTE_STREAMING 或 SOLR_ENABLE_STREAM_BODY 或等效的系统属性。 -
用于指定包含敏感信息的 sysProps 的方法已得到简化。现在可以使用 sysProp
-Dsolr.hiddenSysProps
或 envVarSOLR_HIDDEN_SYS_PROPS
来提供逗号分隔的模式列表,以匹配应隐藏或编辑的 sysProps。有关更多信息,请参阅 hiddenSysProps 部分。已弃用 sysProp
-Dsolr.redaction.system.pattern
,请改用上述选项。<metrics>
下的<hiddenSysProps>
solr.xml 元素已弃用。相反,请使用<solr>
下的 <hiddenSysProps> 标记,该标记接受逗号分隔的字符串。 -
模式设计器 现在使用与 ConfigSet 上传 API 相同的信任模型。
官方 Docker 镜像
-
官方 Solr Dockerfile 的自定义方式已更改。已删除自定义选项
SOLR_DOWNLOAD_URL
、SOLR_CLOSER_URL
、SOLR_DIST_URL
和SOLR_ARCHIVE_URL
。指定 Solr 二进制文件的自定义位置的唯一方法是通过SOLR_DOWNLOAD_SERVER
。如果服务器 URL 包含apache.org
,则 Dockerfile 将检查 gpg 签名文件。如果服务器 URL 不包含apache.org
,则将跳过 gpg 签名检查。如果您想使用自定义版本的 Solr 构建 Solr 镜像,仍然强烈建议使用 Solr 二进制 TGZ 中包含的 Dockerfile。自定义版本的 Solr 在构建时将包含此 Dockerfile。
现在默认禁用删除未知核心
-
当 Solr 从文件系统加载核心时,它将检查 ZooKeeper 中是否存在相应的集群状态。在 Solr 9.3 之前,如果没有相应的条目,则会自动删除核心以删除孤立文件。从 Solr 9.3 开始,默认情况下不再启用此行为。请参阅删除未知核心。
使用 timeAllowed
-
使用
timeAllowed
的查询超时实现方式有所不同。它应该更快,但保真度较低 - 不会在核心查询处理之外超时查询(例如,不会取消拼写检查或分面)。使用solr.useExitableDirectoryReader
来使用之前的行为。请与 Solr 开发人员分享您的经验!如果未使用 timeAllowed,则不应启用之前的行为,因为不幸的是,其性能损失现在会强加给所有查询,即使是没有 timeAllowed 的查询。
v2 API
-
Solr 的实验性 “v2” API 在 9.3 版本中进行了一些改进。
它现在正在接近 Solr v1 API 提供的功能对等。特别是,9.3 添加了用于与别名属性和集合快照交互的 v2 “CRUD” 端点。几个较低级别的 “复制” API 现在也提供了 v2 等效项。
此外,v2 API 作为一个整体正在重新设计,使其更具 REST 风格和直观性。为此,9.3 对 v2 分片、副本和备份创建和删除 API 引入了向后不兼容的更改。许多较低级别的 “命令” API 也进行了调整,包括:集合重新加载、集合重命名、“强制领导者”、“平衡分片唯一” 以及所有 Solr 的“日志级别”和“日志监视器” API。使用 Solr v2 端点的客户端应在升级前根据 CHANGES.txt 中的修改 API 的完整列表检查其用法。每个 API 的详细信息都在 9.3 参考指南中提供。
Solr 9.2
升级到 Jetty 10.x
-
由于 Jetty 9.x 已停止维护,Solr 从 9.x 升级到了 Jetty 10.x。Jetty 10.x 的 Java 最低版本要求为 Java 11,与 Solr 9 的最低 Java 版本匹配。Jetty 日志已再次替换为 slf4j,与 Solr 匹配。有关 Jetty 10.x 的其他亮点,请参阅 https://webtide.com/jetty-10-and-11-have-arrived/。
Jetty 配置
-
Solr 不再在
server/lib
和WEB-INF/lib
之间重复某些 Jetty “server” 库依赖项(jetty-util、jetty-io 等)。这是对二进制发布工件的改进,但 Jetty 默认不允许 Web 应用程序 (Solr) 共享这些库。server/contexts/solr-jetty-context.xml
现在明确删除了这些限制,允许 Solr 共享现在位于server/lib/ext
中的这些 “server” jar 文件。 -
“瞬态核心”功能现已弃用。
SSL 配置
-
当使用启用了 SSL 的 Solr 集群通过 HTTP2 使用 Solr(或 SolrJ)时,默认的
-Dsolr.ssl.checkPeerName
值现在为 **true**。这是启用 SSL中记录的内容,并且与原始HttpSolrClient
的功能匹配。
Docker
-
官方 Docker 镜像和提供的 Dockerfile 的操作系统版本已从 Ubuntu 20 (focal) 升级到 Ubuntu 22 (jammy)。Solr 的 Docker 镜像现在需要 Docker 引擎版本 20.10.10 或更高版本。
无法升级 Docker 引擎的用户在启动容器时需要指定 docker 命令行选项 --security-opt seccomp=unconfined 。 |
流式表达式
-
流式表达式已从 Solrj 核心移到其自己的名为
solrj-streaming
的模块中。此更改只会影响在 Solr 之外的客户端中使用过流式表达式类的用户。发送到 /stream 处理程序的流式表达式仍将像以前一样运行。使用流式表达式类的外部客户端需要更新其依赖项,以引用org.apache.solr
groupId 下的solrj-streaming
工件。
弃用
-
从 Zookeeper 加载 solr.xml 已弃用。请参阅配置 solr.xml。
-
分析组件已弃用。请考虑使用JSON 分面 API 作为替代。如果存在您需要但目前 JSON 分面未涵盖的功能,请通知项目。
-
jaegertracer-configurator
模块已弃用,将在 Solr 10 中删除。用户应开始迁移到新的opentelemetry
模块。
Solr 9.1.1
-
Solr 不再接受 configSets 的所有文件类型。有关详细信息,请参阅ConfigSet 禁止的文件类型。
Solr 9.1
SolrJ
SolrJ 开始拆分。如果您使用 ZooKeeper 坐标创建 CloudSolrClient
,则需要在 solrj-zookeeper
上添加依赖项。如果您使用 SolrJ 的 Maven POM 来依赖 SolrJ,则应该通过传递解析自动发生这种情况。请考虑迁移到使用客户端构建器中指定 Solr URL 列表,而不是依赖 ZooKeeper。这不仅减少了依赖项,而且通过能够限制 ZooKeeper 访问来提高安全性。
Zookeeper
Zookeeper 凭据支持现在遵循新的范例。旧类(例如 VMParamsAllAndReadonlyDigestZkACLProvider
和 VMParamsSingleSetCredentialsDigestZkCredentialsProvider
)已弃用,但至少在 10.0
之前仍然支持。鼓励用户在下一个主要版本发布之前升级到未弃用的类。有关详细信息,请参阅deployment-guide:zookeeper-access-control.adoc#solr-to-zookeeper-acls-workflow。
Solr 9.0
查询和索引
-
通过
DenseVectorField
fieldType 和 K-最近邻 (KNN) 查询解析器实现的密集向量“神经”搜索。 -
管理 UI 支持 SQL 查询。
-
新的 Snowball 词干分析器:印地语、印度尼西亚语、尼泊尔语、塞尔维亚语、泰米尔语和意第绪语。
-
新的 NorwegianNormalizationFilter
-
隐式
/terms
处理程序现在返回 SolrCloud 中所有分片的词,而不是仅返回本地核心的词。用户/应用程序可能会假设旧的行为。可以通过标准distrib=false
参数修改请求,使其仅使用接收请求的本地核心。 -
SQL 支持已移动到 sql 模块。现有的 Solr 配置不需要任何与 SQL 相关的更改,但需要安装该模块 - 请参阅SQL 查询语言部分。
-
JSON 聚合使用更正的样本公式来计算标准偏差和方差。JSON 聚合中 stdDev 和方差的计算与 StatsComponent 相同。
-
Json Facet 模块中的分面计数始终返回一个
long
值,无论分片数量如何。 -
MacroExpander
将不再扩展expr
参数(由流式表达式使用)内的 URL 参数。此外,建议用户在构造包含用户提供的数据的流式表达式时使用InjectionDefense
类,以避免类似于 SQL 注入的风险。可以通过在启动时传递给 JVM 的-DStreamingExpressionMacros=true
来恢复扩展expr
参数的旧行为。 -
以原始 XML 格式序列化的字段值(通过
[xml]
原始值 DocTransformer 和wt=xml
)的响应格式已更改。以前,值直接作为每个<doc>
的顶层子元素放入,从而模糊了关联的字段名称并产生不一致的<doc>
结构。从 9.0 版本开始,原始值被包装在每个<doc>
顶层的<raw name="field_name">[…]</raw>
元素中(或在多值字段的封闭<arr name="field_name"><raw>[…]</raw></arr>
元素中)。以这种方式解析序列化的字段值的现有客户端将需要进行相应的更新。 -
高亮显示:
hl.method=unified
是新的默认设置。如果需要,请使用hl.method=original
切换回来。 -
solr.xml
maxBooleanClauses
现在是递归强制执行的。从旧版本的 Solr 升级的用户可能会发现,过去在处理复杂内部查询结构(例如:使用edismax
的长查询字符串,其中包含许多包含查询时间同义词扩展的qf
和pf
字段)时有效的某些请求现在达到了此限制并失败。建议处于这种情况下的用户考虑其查询/配置的复杂性,并在必要时增加maxBooleanClauses
的值。 -
现在,对嵌套文档进行原子/部分更新*要求*
_root_
字段清楚地表明该文档不是根文档。Solr 8 会回退到_route_
参数,但现在不再这样做。
安全性
-
新增 证书认证插件,支持端到端使用 x509 客户端证书进行身份验证和授权。
-
改进了使用 PKI 认证插件时的安全性。
-
升级到 Zookeeper 3.7,允许 TLS 保护的 ZK 通信。
-
所有请求处理程序都支持安全权限。用户可能需要调整他们的
security.json
文件。 -
可以通过系统属性禁用管理 UI。
-
BasicAuthPlugin
和JWTAuthPlugin
中的属性blockUnknown
现在默认为true
而不是false
。此更改向后不兼容。如果您需要 9.0 之前的默认行为,则需要在security.json
中显式设置blockUnknown:false
。 -
Solr 现在默认启用 Java 安全管理器运行。Hadoop 用户可能需要禁用此项。
-
为了更好的开箱即用安全性,Solr 现在默认绑定到 localhost 网络接口。需要更广泛地暴露 Solr 的管理员可以更改 Solr include 文件 (
solr.in.sh
/solr.in.cmd
) 中的SOLR_JETTY_HOST
属性。 -
Solr 嵌入式 zookeeper 默认仅绑定到 localhost。此嵌入式 zookeeper 不应在生产环境中使用。如果您依赖以前的行为,则可以更改
solr/server/solr/zoo.cfg
中的clientPortAddress
。 -
Jetty 低级别请求日志(NCSA 格式)现在默认启用,日志保留 3 天。这可能需要比 8.x 版本更多的磁盘空间用于日志。请参阅 配置日志 以了解如何更改此设置。
-
Hadoop 身份验证支持已移至新的
hadoop-auth
模块。用户需要将模块hadoop-auth
添加到类路径中。该插件的包名也更改为org.apache.solr.security.hadoop
,但仍可以简写形式class="solr.HadoopAuthPlugin"
、class="solr.ConfigurableInternodeAuthHadoopPlugin"
或class="solr.KerberosPlugin"
加载 - 请参阅 Hadoop 身份验证插件 部分。 -
JWTAuthPlugin 已移至模块。用户需要将模块
jwt-auth
添加到类路径中。该插件的包名也更改为org.apache.solr.security.jwt
,但仍可以简写形式class="solr.JWTAuthPlugin"
加载。 -
依赖项更新 - 许多依赖项更新消除了依赖项中的几个安全问题,从而使 Solr 更加安全。
-
用于定义
shards
参数允许的 URL 的允许列表不再位于shardHandler
配置中。它由solr.xml
文件的顶级属性allowUrls
定义。有关更多信息,请参阅 solr.allowUrls 格式 文档。 -
为了提高安全性,
StatelessScriptUpdateProcessorFactory
已重命名为ScriptUpdateProcessorFactory
,并移动到scripting
模块,而不是作为 Solr 核心的一部分发布。此模块需要显式启用。 -
为了提高安全性,
XSLTResponseWriter
已移动到scripting
模块,而不是作为 Solr 核心的一部分发布。此模块需要显式启用。
构建和 Docker
-
Solr 现在独立于 Lucene(单独的 Apache 项目)构建和发布。
-
构建系统已切换到 Gradle,不再使用 Ant + Ivy。
-
Docker 镜像创建现在是 Apache Solr GitHub 仓库的一部分。
-
Docker 镜像文档现在是参考指南的一部分。
-
官方 Docker 镜像已升级为使用 JDK17(由 Eclipse Temurin 提供),并能够创建功能相同的本地镜像。
日志和指标
-
指标处理程序仅依赖于 SolrJ 而不是核心,并且有自己的
log4j2.xml
,不再共享 Solr 的日志配置。 -
现在只有
SearchHandler
和子类才有“本地”指标。现在,它被跟踪为另一个带有“[shard]”后缀的处理程序,例如“/select[shard]”。不再有“.distrib.”命名的指标;除非“[shard]”,否则所有指标都被认为是这样的。默认的 Prometheus 导出器配置将该组件拆分为一个名为“internal”的新标签。示例 Grafana 仪表板现在会过滤以包括或排除此项。 -
“Prometheus 导出器”的默认端口已从 9983 更改为 8989,因此您可能需要在升级后调整配置。
-
日志记录现在默认是异步的。在发生某些严重崩溃的情况下,可能会有一个小窗口丢失日志消息。如果这是不可接受的,请切换回同步日志记录,请参阅 log4j2 配置文件(默认为 log4j2.xml)中的注释。
-
Log4J 配置 & Solr MDC 值 - Solr 为日志调用设置的 MDC 值(例如集合名称、分片名称、副本名称等)现在已被修改为“裸”值,不包含过去版本中包含的特殊单字符前缀。Solr 的默认
log4j2.xml
配置文件已修改为在作为<PatternLayout/>
的一部分包含在日志消息中时,将这些相同的前缀添加到 MDC 值。希望确保升级后 Solr 9.x 日志格式一致的用户需要对其日志配置文件进行类似的更改。有关更多详细信息,请参阅 SOLR-15630。 -
Jetty 请求日志 现在默认启用,即记录每个请求。
-
prometheus-exporter 不再作为 Solr 模块打包。可以在
solr/prometheus-exporter/
下找到它。 -
Solr 模块(以前称为 contribs)现在可以通过环境变量(例如,在
solr.in.sh
或solr.in.cmd
中)或作为系统属性(例如,在SOLR_OPTS
中)轻松启用。示例:SOLR_MODULES=extraction,ltr
。
弃用和删除
-
数据导入处理程序 (DIH) 现在是一个独立的项目;它不再是 Solr 的一部分。
-
不再支持
clusterstate.json
,并且已删除MIGRATESTATE
API。如果您的集合使用clusterstate.json
,您将需要采取一些步骤,本文档的其他地方会对此进行描述。 -
自动缩放框架已被删除。请参阅 副本放置插件 以了解替代选项。
-
LegacyBM25SimilarityFactory
已被删除。 -
传统的 SolrCache 实现(LRUCache、LFUCache、FastLRUCache)已被删除。用户必须修改其现有配置以改用 CaffeineCache。
-
VelocityResponseWriter
现在是一个独立的项目;它不再是 Solr 的一部分。这包括所有先前包含的/browse
和wt=velocity
示例。 -
跨数据中心复制已被删除。
-
缺少 HTTP2 支持的 SolrJ 客户端(如
HttpSolrClient
和LBHttpSolrClient
)已被弃用。旧的 CloudSolrClient 已重命名为 CloudLegacySolrClient 并已弃用。 -
删除了 SimpleFSDirectoryFactory,改为使用 NIOFSDirectoryFactory。
-
删除了已弃用的
HttpSolrClient.RemoteSolrException
和HttpSolrClient.RemoteExecutionException
。所有用法都替换为BaseHttpSolrClient.RemoteSolrException
和BaseHttpSolrClient.RemoteExecutionException
。 -
已删除
maxShardsPerNode
参数,因为它已损坏且与其他副本放置策略不一致。应改为使用其他相关的放置策略,例如自动缩放策略或基于规则的放置。 -
二进制发行版不再包含 test-framework jar。
-
已删除已弃用的 BlockJoinFacetComponent 和 BlockJoinDocSetFacetComponent。鼓励用户迁移到 JSON Facet API 中的 uniqueBlock()。
-
核心级别的管理 API 端点
/admin/threads
、/admin/properties
、/admin/logging
现在仅在节点级别可用。
其他
-
Contrib 模块现在只是“模块”。您可以通过环境变量
SOLR_MODULES
轻松启用模块。 -
作为单独模块提取的功能包括:HDFS、Hadoop-Auth、SQL、Scripting 和 JWT-Auth。
-
已删除发行版中的“dist”文件夹。请更新
solrconfig.xml
中的<lib>
条目以使用新位置。-
可以在
server/solr-webapp/webapp/WEB-INF/lib/
下找到solr-core
和solr-solrj
jar。 -
Solr 模块 jar 及其依赖项可以在
modules/<module-name>/lib
中找到,每个模块单独打包。 -
solrj-deps
(SolrJ Dependencies) 不再与其他服务器 jar 分开。 -
如果您手动加载 SolrJ,请参阅 SolrJ Maven 工件以查看您需要从
server/solr-webapp/webapp/WEB-INF/lib/
和server/lib/ext/
中包含的确切依赖项。如果您计划将 SolrJ 用作 JDBC 驱动程序,请参阅 JDBC 文档。 -
有关更多信息,请参阅 Libs 文档。
-
-
SolrJ 类
CloudSolrClient
现在支持 HTTP2。它有一个新的构建器。有关此类 8.x 版本,请参阅CloudLegacySolrClient
。 -
在备份请求响应中,
response
键现在使用 map 来返回信息,而不是列表。这仅适用于以 JSON 格式返回信息的用户,这是默认行为。 -
SolrMetricProducer
/SolrInfoBean
API 已更改,实现这些 API 的第三方组件需要更新。 -
已完全删除对黑名单/白名单术语的使用。JWTAuthPlugin 参数
algWhitelist
现在是algAllowlist
。旧参数在 9.x 中仍然有效。不再支持环境变量SOLR_IP_WHITELIST
和SOLR_IP_BLACKLIST
,但已替换为SOLR_IP_ALLOWLIST
和SOLR_IP_DENYLIST
。 -
Solr 备份 - 现在备份的异步响应可以正确地聚合和返回信息。对于集合的快照备份请求响应,添加了类似于增量备份请求响应的额外字段,例如
indexVersion
、indexFileCount
等。 -
如果您正在使用 HDFS 备份存储库,您需要将存储库类更改为
org.apache.solr.hdfs.backup.repository.HdfsBackupRepository
- 请参阅HDFS 备份存储库部分。 -
HDFS 存储支持已移至一个模块。现有的 Solr 配置不需要任何与 HDFS 相关的更改,但是需要安装该模块 - 请参阅Solr on HDFS部分。
-
“cat”流表达式使用的文件夹
$SOLR_HOME/userfiles
不再在启动时自动创建。用户必须创建此文件夹。 -
Solr 不再要求在
$SOLR_HOME
中存在solr.xml
。如果未找到,Solr 将使用$SOLR_TIP/server/solr/solr.xml
中的默认文件。您可以通过设置环境变量SOLR_SOLRXML_REQUIRED=true
或系统属性-Dsolr.solrxml.required=true
来恢复到 9.0 之前的行为。如果使用嵌入式 Zookeeper 启动,Solr 也不再要求在$SOLR_HOME
中存在zoo.cfg
。 -
base_url
已从存储的集群状态中删除。如果您的所有客户端应用程序都能将 SolrJ 升级到 8.8.x,则可以设置-Dsolr.storeBaseUrl=false
(在 Solr 8.8.1 中引入),以便使 Zookeeper 中存储的状态与 Solr 的未来版本更好地对齐;从 Solr 9.x 开始,base_url
将不再持久化存储。但是,如果您的所有客户端应用程序都无法将 SolrJ 升级到 8.8.x,则应设置-Dsolr.storeBaseUrl=true
,以便 Solr 继续在 Zookeeper 中存储base_url
。有关背景信息,请参阅:SOLR-12182 和 SOLR-15145。对solr.storeBaseUrl
系统属性的支持将在 Solr 10.x 中删除,并且不再存储base_url
。 -
现在可以根据字段类型配置通过其 SPI 名称查找分析器组件。
-
solr-extraction
模块已清理,以生成solr-extraction-
jar,而不是solr-cell-
jar。 -
模块中使用的额外 Lucene 库不再打包在二进制发行版中模块目录下的
lucene-libs/
中。相反,这些库将与lib/
中的所有其他模块依赖项一起包含。
早期 8.x 版本中的主要更改
以下是 Solr 8.1 到 8.11 之间发布的主要更改列表。
请务必查看此列表,以便了解您当前运行的 Solr 版本与 Solr 9.0 之间可能发生的更改。
Solr 8.11
有关 Solr 8.11 的主要新功能概述,请参阅8.11 发行说明。
升级到 8.11.x 时,用户应注意与 8.10 相比的以下主要更改。
支持多种身份验证方案
两个新的身份验证和授权插件支持配置多个身份验证方案。
MultiAuthPlugin
允许组合两种或多种身份验证方法,例如 JWT 和基本身份验证。
当同时使用 MultiAuthPlugin
时,会使用 MultiAuthRuleBasedAuthorizationPlugin
,并结合为所有插件定义的各种角色,以确定用户帐户的正确角色分配。
有关配置这些插件的信息,请参阅以下部分
ZooKeeper chroot
现在可以在启动时创建 ZooKeeper chroot(如果它尚不存在)。有关示例,请参阅将 -z 参数与 bin/solr 一起使用部分。
其他更改
还有一些其他值得注意的次要更改
-
config-read
预定义的权限现在可以正确管理各种与配置相关的 API 的访问权限。另请参阅预定义权限。 -
S3BackupRepository 支持配置 AWS Profile(如果需要)。另请参阅S3BackupRepository。
-
此外,备份现在可以在 SPLITSHARD 操作后正确成功,并且可以正确处理增量备份清除。
-
SolrJ 现在支持上传 configset。
Solr 8.10
有关 Solr 8.10 的主要新功能概述,请参阅8.10 发行说明。
升级到 8.10.x 时,用户应注意与 8.9 相比的以下主要更改。
Schema 设计器 UI
Admin UI 中添加了一个新屏幕,允许您使用文档以交互方式设计 Solr 模式。
设计器屏幕为您提供了一个安全的环境,您可以:
-
上传或粘贴示例文档以识别字段。
-
初步了解 Solr 认为字段中的字段类型应该是什么。
-
编辑字段、字段类型、动态字段和支持文件。
-
查看字段的分析将如何影响您的文本。
-
测试模式更改将如何影响查询时行为。
-
将您的更改保存到配置集,以便用于新集合。
有关完整详细信息,请参阅Schema 设计器部分。
S3 中的备份
在 Solr 8.8 中重新设计备份后,允许在 Google Cloud 环境中存储增量备份,Solr 8.10 支持将备份存储在 Amazon S3 存储桶中。
有关如何配置,请参阅S3BackupRepository部分。
安全管理 UI
Solr 的 Admin UI 还获得了一个新屏幕,以支持管理用户、角色和权限。
当使用 bin/solr auth
启用身份验证和/或授权或通过手动安装 security.json
文件时,新 UI 会起作用。在此之前,它会提供警告,指出您的 Solr 实例是不安全的。
有关详细信息,请参阅安全 UI部分。
Solr SQL 改进
Solr 的 SQL 功能已进行了多项改进
-
增加了对
LIKE
、IS NOT NULL
、IS NULL
和通配符(用于简单的LIKE
功能)的支持。 -
添加了两个新的聚合函数:
COUNT(DISTINCT field)
和APPROX_COUNT_DISTINCT(field)
。 -
使用
ORDER BY
子句的查询可以支持OFFSET
和FETCH
操作。 -
现在可以返回多值字段。
-
用户权限已简化,因此对查询端点
/sql
、/select
和/export
的访问权限足以完全访问所有 SQL 查询。
shards.preference
shards.preference
参数的新选项允许根据副本是否为领导者来选择节点。现在,添加 shards.preference=replica.leader:false
会将查询限制为仅针对当前不是其分片领导者的副本。
有关详细信息和示例,请参阅shards.preference 参数部分。
指标和 Prometheus 导出器
指标 API 中的新 expr
选项允许基于正则表达式对指标进行更高级的过滤。有关示例,请参阅指标 API部分。
Prometheus 导出器的默认 solr-exporter.config
已得到改进,可以使用指标 API 中的新 expr
选项来获取较小的指标集。导出的默认指标仍然包括大多数指标,但是配置将更容易根据需要进行修剪。这应该有助于提高由 Prometheus 监视的繁忙集群的性能。
ZooKeeper 凭据
现在可以将 ZooKeeper 凭据存储在由系统属性定义其位置的文件中,而不是以纯文本形式传递。有关如何设置,请参阅开箱即用的凭据实现。
Solr 8.9
有关 Solr 8.9 的主要新功能概述,请参阅8.9 发行说明。
升级到 8.9.x 时,用户应注意与 8.8 相比的以下主要更改。
备份与恢复
Solr 8.9 对 Solr 的备份和恢复支持进行了广泛的更改。
Solr 8.9 中引入了一种新的备份格式,它取代了以前基于快照的备份。这种新格式支持“增量”备份。重复备份到给定位置将利用其前任存储的数据,并且仅对自上次备份以来已更改的文件进行操作。默认情况下支持此功能,只需将每个备份文件存储在同一位置即可。
旧格式和新格式不兼容,尽管暂时仍然可以使用旧格式(所有文件的完整快照)中的备份来恢复到 Solr。旧格式已正式弃用,并且在 Solr 9.0 中可能会删除对其的支持。
暂时可以通过定义参数 incremental=false
来创建旧格式。但是,同样,此支持可能会在 Solr 9.0 中删除。
有关备份的更多文档,请访问备份和恢复。
用于备份的新 Collections API 命令
8.9 中还提供了一个新的备份存储库选项,即使用 Google Cloud Storage (GCS)。这是一个模块(位于 modules/gcs-repository
中)。有关配置详细信息,请参阅GCSBackupRepository。Solr 社区正在努力在不久的将来添加对 S3 存储桶的支持。
嵌套文档
子文档转换器的 childFilter
参数不再应用查询语法转义,因为它与 Solr 的其余部分不一致并且具有限制性。这指的是 [child childFilter='field:value']
。在 8.0 之前,这里也没有转义。
折叠和展开
原地更新
一个新的请求参数 update.partial.requireInPlace=true
允许告诉 Solr,如果所有必要的条件不满足以允许成功进行原地更新,则“快速失败”。另请参阅原地更新。
指标历史记录
指标历史记录功能,允许长期存储和聚合 Solr 的指标,已被弃用,将在 9.0 版本中删除。
嵌入式 Solr 服务器
当使用 EmbeddedSolrServer 时,它将不再关闭传递给它的 CoreContainer 实例。
Solr 8.8
升级到 8.8.x 版本时,用户应注意 8.7 版本的主要更改如下。
嵌套文档
-
当对子文档执行原子/部分更新时
-
提供
_root_
字段(根文档的 ID),以便 Solr 了解您正在操作的是子文档而不是根文档。如果缺少该字段,Solr 将查看_route_
参数,但将来可能会更改,因为它不是一个理想的替代品。如果两者都不存在,Solr 会假定您正在更新根文档。如果此假设不成立,Solr 将执行廉价检查,通常会检测到问题,并会抛出异常以提醒您需要指定根 ID。为了提高性能和健壮性,进行了此向后不兼容的更改。 -
此功能不再要求
_root_
字段上的stored=true
或docValues=true
。尽管您可能出于其他目的而使用它(例如,用于uniqueBlock(…)
)。 -
此功能不再需要
_nest_path_
字段,尽管您可能应该继续定义它,因为它对其他事情很有用。
-
删除的模块
-
由于提供搜索结果在线聚类的依赖项中缺乏 Java 1.8 兼容性,搜索结果聚类模块 (Carrot2) 已从 8.x Solr 中删除。该模块将在 Solr 9.0 中重新引入。
学习排序
-
交错支持已添加到学习排序 (LTR)。目前仅支持 Team Draft Interleaving 算法。有关使用此功能的示例,请参阅运行交错两个模型的重新排名查询部分。
指标
-
为 SolrCloud 的 Overseer 添加了两个指标
-
solr_metrics_overseer_stateUpdateQueueSize
-
solr_metrics_overseer_collectionWorkQueueSize
-
Prometheus 导出器
-
Prometheus 导出器随附的
./bin
脚本现在允许使用带有环境变量的自定义 java 选项。有关更多详细信息,请参阅环境变量选项部分。 -
默认的 Grafana 仪表板现在包括用于查询性能监控的面板。默认的 Prometheus 导出器配置包括每秒查询次数 (QPS) 和第 95 百分位数 (P95) 等指标来填充新面板。
-
默认的 Prometheus 导出器配置还包括上面“指标”中提到的两个新指标。
Solr Home
-
用于识别“Solr Home” (
solr.solr.home
) 的内部逻辑已重构,以使测试不易出错。使用SolrPaths.locateSolrHome()
或new SolrResourceLoader
的插件开发人员应检查弃用警告,因为现有的一些功能将在 9.0 中删除。SOLR-14934 提供了有关此更改的更多技术细节,供相关人员参考。
从存储状态中删除 base_url
从 Solr 8.8.0 开始,已从副本的存储状态中删除 base_url
属性 (SOLR-12182)。如果您可以将所有客户端应用程序的 SolrJ 升级到 8.8.x,则可以设置 -Dsolr.storeBaseUrl=false
(在 Solr 8.8.1 中引入),以更好地使 ZooKeeper 中的存储状态与 Solr 的未来版本保持一致。但是,如果您无法将所有客户端应用程序的 SolrJ 升级到 8.8.x,则保留默认的 -Dsolr.storeBaseUrl=true
,以便 Solr 继续在 ZooKeeper 中存储 base_url
。
在从先前版本的 Solr 滚动升级到 8.8.0 期间,您还可能会在集合状态更新中看到一些 NPE。在将群集中的所有节点升级到 8.8.0 后,集合应完全恢复。如果升级后有任何副本未恢复,请触发另一次滚动重启以重新选举领导者。
Solr 8.7
有关 Solr 8.7 的主要新功能概述,请参阅8.7 发行说明。
升级到 8.7.x 版本时,用户应注意 8.6 版本的主要更改如下。
自动缩放
-
如果从 8.6.0 升级,请参阅下面的8.6.1 升级说明,了解有关 8.6.0 中引入的性能下降的信息,这些性能下降需要一些干预才能解决。如果您已在使用 8.6.1 或更高版本,则可以忽略这些说明。
弃用
-
自动缩放框架现已正式弃用,将在 Solr 9.0 中删除。Solr 社区正在开发可插拔的 API 来替换此功能,目标是在 9.0 发布之前准备就绪。弃用包括:自动缩放策略、触发器、
withCollection
支持、模拟框架、UI 中的自动缩放建议选项卡、autoAddReplicas
和UTILIZENODE
命令。 -
同样,基于规则的副本放置策略已弃用,将在 Solr 9.0 中被副本放置和群集事件的 API 取代,并提供基于插件的实现。
-
LUCENE-9576 中删除了对检测旋转磁盘的支持。Solr 中相应的
spins
指标仍然存在,但现在它们始终返回false
,并且将在 Solr 9.0 中删除。
用户管理的群集术语已更新
-
Solr 已在代码库和所有文档中将术语“主节点”和“从节点”替换为“领导者”和“追随者”。
此功能仅在参数名称方面发生了更改,我们不希望在升级到 8.7 甚至以后的 9.0 版本时出现任何向后兼容性问题。
但是,用户应在完成群集所有节点上的升级后更新其
solrconfig.xml
文件。将您的配置与用户管理的索引复制中更新的配置示例进行比较,将显示需要更改的内容的示例,但以下是主要更改-
在复制领导者上,在
/replication
请求处理程序的定义中-
将“master”替换为“leader”。
-
如果以前的术语用于任何追随者
solrconfig.xml
文件定义的名称中,则将“slave”替换为“follower”。此文件可以命名为任何名称,因此您可以根据需要将其更改为您喜欢的任何名称。 -
如果以前的术语用于复制中继器配置中,则将“slave”替换为“follower”。
-
-
在复制追随者上,在
/replication
请求处理程序的定义中-
将“masterUrl”替换为“leaderUrl”。
-
如果以前的术语用于中继器配置中,则将“slave”替换为“follower”。
-
-
JSON Facets
-
8.7 中包含了
relatedness()
统计函数的性能增强。这些增强在高基数字段中产生最高的收益,如果使用具有较低基数字段,可以使用新的sweep_collection
参数禁用。有关详细信息,请参阅relatedness() 选项部分。
solr.in.sh / solr.in.cmd
-
Solr 依赖于
solr.in.sh
或solr.in.cmd
中定义的SOLR_STOP_WAIT
参数来确定在启动时等待多长时间。一个新的参数SOLR_START_WAIT
允许定义 Solr 应等待启动完成多长时间。如果超过此参数设置的时间,Solr 将退出启动过程并将
solr.log
文件的最后几行返回到终端。默认情况下,此参数设置为与
SOLR_STOP_WAIT
相同的值。 -
默认的 ZooKeeper 客户端超时 (
ZK_CLIENT_TIMEOUT
) 现在为 30 秒(30000
毫秒),而不是 15 秒。
Configsets
-
现在可以通过向Configset API 提供
overwrite=true
参数来覆盖上传更改时现有的配置集。一个相关的参数是
cleanup=true
,它允许删除旧配置集中在覆盖后遗留的任何文件。这两个参数的默认值均为
false
。 -
当删除具有自动创建的配置集的集合时(即,在创建集合时从
_default
集合复制了配置集),如果该配置集未被任何其他集合使用,则也会删除该配置集。
日志记录
-
现在为所有分布式搜索请求(在 SolrCloud 中)记录请求 ID (
rid
),可用于关联系统中的查询事件。如果需要,可以添加参数disableRequestId=true
来禁用此功能。
Solr 8.6.1
有关 Solr 8.6.1 中包含的修复的概述,请参阅8.6.1 发行说明。
升级到 8.6.1 版本时,用户应注意 8.6.0 版本的主要更改如下。
自动缩放
-
如 8.6 升级说明中所述,从 8.6.0 开始提供了默认的自动缩放策略。此默认自动缩放策略导致在大型群集(50 个以上集合)中集合创建调用越来越慢。
在 8.6.1 中,已删除默认的自动缩放策略,除非显式创建策略,否则群集将不使用自动缩放。如果您的群集运行的是 8.6.0 并且不使用显式的自动缩放策略,请升级到 8.6.1 并通过以下命令删除默认的群集策略和首选项。
将
localhost:8983
替换为您的 Solr 端点。curl -X POST -H 'Content-type:application/json' -d '{set-cluster-policy : [], set-cluster-preferences : []}' https://127.0.0.1:8983/api/cluster/autoscaling
此信息仅与从 8.6.0 升级的用户相关。如果从早期版本升级到 8.6.1+,则可以忽略此警告。
Solr 8.6
请参阅8.6发行说明,了解Solr 8.6的主要新功能概述。
升级到8.6.x版本时,用户应注意以下与8.5版本相比的主要更改。
支持 Block-Max WAND
Lucene在8.0中添加了对Block-Max WAND的支持,并且8.6使Solr也可以使用此功能。
通过不计算不太可能出现在结果集顶部的结果的分数,可以显著提高性能。
当使用新的查询参数minExactCount
时,此功能会被启用。此参数告诉Solr准确计数命中数,直到至少达到此值。一旦达到此值,Solr可以跳过那些得分不足以进入顶部文档集合的文档,这有可能大大加快搜索速度。
重要的是要注意,当使用此参数时,搜索的命中计数可能不准确。保证命中计数精确到minExactCount
的值,但任何高于此值的返回命中计数都可能是近似值。
所有响应中都包含一个新的布尔属性numFoundExact
,以指示响应中的命中计数是否预期是精确的。
有关此新功能的更多信息,请参见minExactCount 参数部分。
自动缩放
-
注意:自8.6.1起,已删除默认的自动缩放策略
Solr现在包含一个默认的自动缩放策略。可以使用自定义规则或通过指定一个空策略来覆盖此策略,以替换默认策略。
-
ComputePlan操作现在支持集合选择器,以根据集合属性识别集合,从而确定应操作哪些集合。
安全
-
在Solr 8.6之前,接受文件系统位置的Solr API(例如核心创建、备份、还原等)未验证路径,并且Solr将允许任何绝对或相对路径。从8.6开始,默认情况下仅允许相对于
SOLR_HOME
,SOLR_DATA_HOME
和coreRootDir
的路径。如果需要在默认路径之外创建核心或存储备份,则需要告知Solr允许哪些路径。
solr.xml
中的一个新元素allowPaths
接受允许的路径的逗号分隔列表。当使用8.6附带的
solr.xml
文件时,可以通过系统属性solr.allowPaths
配置允许的路径列表。请参阅bin/solr.in.sh
或bin\solr.in.cmd
以获取用法示例。使用值*
将允许像早期版本中的任何路径。有关此内容的更多信息,请参见Solr.xml 参数部分。
UNC格式(例如
\\myhost\myshare\mypath
)上的Windows SMB共享现在始终被禁止。请改用驱动器号挂载,例如S:\mypath
。 -
现在可以使用新的授权插件
ExternalRoleRuleBasedAuthorizationPlugin
。此插件允许身份验证插件(例如JWT)提供用户的角色,而不是在Solr内部维护用户到角色的映射。 -
启用身份验证后,管理UI仪表板(主屏幕)现在包含一个面板,显示正在使用的身份验证和授权插件、登录的用户名以及分配给该用户的角色。左侧导航中还会出现一个新链接,允许用户注销。
流式表达式
-
/export
处理程序现在支持流式表达式,以允许将导出的输出限制为仅匹配的文档。有关如何使用此功能的更多信息,请参见指定本地流式表达式部分。
-
stats
,facet
和timeseries
表达式现在支持百分位数和标准差聚合。
高亮显示
对于统一高亮显示器:设置hl.fragsizeIsMinimum
现在默认为false
,因为发现当高亮显示大量文本时,true
会导致明显的性能下降。与Solr 8.5相比,这将产生更长的平均高亮显示,但与以前的版本相比,相对没有变化。此外,如果您的应用程序高亮显示大量文本,则可能需要尝试降低hl.fragAlignRatio
以换取理想的片段对齐以获得更好的性能。
弃用
社区的主要关注点是提高Solr的稳定性和可支持性。随着8.4版本中软件包管理器系统的添加,我们现在可以将某些功能移至由具有适当开发和支持专业知识的第三方维护的插件中。我们的目标是使运行Solr更容易,并且更不易发生停机和其他麻烦。本着这种精神,以下功能已被弃用,并计划在Solr 9.0中删除。
-
跨数据中心复制(CDCR)以其当前形式被弃用,并计划在9.0中删除。此功能不太可能被相同的插件替换。但是,社区正在努力寻找一种替代功能,以用于灾难恢复和故障转移。
-
数据导入处理程序(DIH)已被弃用,并计划在9.0中删除。替换DIH的社区支持插件的工作正在进行中,并且可能很快就可以使用。
-
支持在HDFS中存储索引和备份已被弃用,并计划在9.0中删除。此功能的社区支持版本将来可能会作为插件提供。有关更多详细信息,请参见SOLR-14021。
鼓励有兴趣将某个功能作为插件维护的用户加入开发人员邮件列表,以了解有关如何提供帮助的更多信息。
Solr 8.5
请参阅8.5发行说明,了解Solr 8.5的主要新功能概述。
升级到8.5.x版本时,用户应注意以下与8.4版本相比的主要更改。
注意:对于选择非默认帖子格式(例如“FST50”)的用户,在8.4版中追溯添加了索引不兼容警告。
SolrCloud升级的注意事项
Solr 8.5引入了Overseer队列和映射中元素格式的更改(有关此更改的技术讨论,请参阅SOLR-14095)。此队列由Overseer内部使用,以可靠地处理操作,在Overseer和协调器节点之间传递操作结果,并通过REQUESTSTATUS API显示有关异步集合操作的信息。
此更改不会要求您更改任何客户端代码,您应该在客户端方面看不到任何差异。但是,在升级现有SolrCloud集群时,它确实需要根据您的升级策略谨慎操作。
如果您使用原子重启策略升级Solr
-
如果您不使用异步或REQUESTSTATUS操作,则应该能够重新启动并且不会看到任何问题。
-
如果您使用集合API操作
-
暂停集合API操作。
-
如果您使用异步操作,请清理队列(有关示例,请参阅DELETESTATUS部分)。
-
升级并重新启动节点。
-
恢复所有正常操作。
-
如果您使用滚动重启策略升级Solr
-
如果您不使用集合API操作,则应该能够执行滚动重启并且不会看到任何问题。
-
如果您使用集合API操作,但是可以在重启期间暂停它们的使用,最简单的方法是
-
暂停集合API操作。
-
升级并重新启动所有节点。
-
如果您使用异步操作,请清理队列(有关示例,请参阅DELETESTATUS部分)。
-
恢复所有正常操作。
-
如果您使用集合API操作并且在升级期间无法暂停它们
-
使用系统属性启动8.5节点:
-Dsolr.useUnsafeOverseerResponse=deserialization
。确保最后升级Overseer节点。 -
一旦所有节点都在8.5中,并且一旦您不再需要读取旧状态,请再次重新启动并删除系统属性。
如果您希望保留旧的(但安全性较低)序列化策略,则可以使用系统属性启动节点:-Dsolr.useUnsafeOverseerResponse=true
。请记住,此功能将在Solr的未来版本中删除。
安全管理器
Solr现在可以启用Java安全管理器运行。要启用此功能,请在solr.in.sh
或solr.in.cmd
中设置属性SOLR_SECURITY_MANAGER_ENABLED=true
。请注意,如果您使用HDFS存储索引,则不能启用安全管理器。
在Solr 9.0中,这将是默认设置。
阻止/允许特定IP
Solr具有两个新参数,允许您使用IP地址限制对Solr的访问。使用SOLR_IP_WHITELIST
配置白名单,使用SOLR_IP_BLACKLIST
配置黑名单。这些属性在solr.in.sh
或solr.in.cmd
中定义。
另请参见启用IP访问控制部分。
BlockJoin Facet弃用
BlockJoinFacetComponent被标记为弃用,并将会在9.0中删除。建议用户迁移到JSON Facet API中的uniqueBlock()
。有关此内容的更多信息,请参见Block Join域更改部分。
使用布尔查询解析器进行缓存
默认情况下,布尔查询解析器会将查询缓存在Solr的filterCache中。现在可以使用本地参数cache=false
禁用此功能。
索引日志文件
Solr现在包含一个命令行工具bin/postlogs
,它将Solr的日志文件索引到一个集合中。这提供了一种使用Solr或可视化工具(例如Zeppelin)轻松解决系统问题的方法。
有关更多详细信息,请参阅日志分析的文档。
高亮显示
Solr 的统一高亮器现在有两个参数来帮助控制片段大小:hl.fragAlignRatio
和 hl.fragsizeIsMinimum
。有关这些新参数的详细信息,请参阅统一高亮器部分。无论设置如何,片段的大小都可能与以前不同。警告:这些默认设置对于使用默认句子分隔符迭代器高亮大量文本的应用程序来说,会导致明显的性能下降。请参阅 8.6 的升级说明,了解您可以在 8.5 中应用的建议。
共享库系统参数
Solr 的 solr.xml
文件长期以来都支持 sharedLib
参数,您可以使用它来定义所有核心可能需要路径中的 .jar 文件的公共位置。
现在可以在 solr.in.sh
或 solr.in.cmd
中将此属性定义为系统属性 (-Dsolr.sharedLib=/path/to/lib
),添加到 SOLR_OPTS
中(有关详细信息,请参阅 solr.in.sh
或 solr.in.cmd
)。
Solr 8.4
有关 Solr 8.4 的主要新功能概述,请参阅8.4 发行说明。
升级到 8.4.x 时,用户应注意 8.3 版本的以下主要更改。
提醒:如果您在 schema 中设置了 postingsFormat
或 docValuesFormat
以使用非默认选项,您可能会阻止自己升级未来版本的 Lucene/Solr 软件。多个非默认的 postings 格式在 8.4 中发生了更改,从而导致先前索引的索引数据失效。这包括出于性能原因而由 Solr TaggerHandler 推荐的 "FST50"。现在有改进的文档来指导您进行这种权衡选择。
包管理系统
8.4 版本为 Solr 引入了包管理系统。该系统的目标是允许热(实时)部署插件,为插件提供打包指南,并通过遵循其他包管理系统中使用的熟悉概念来标准化 Solr 的方法。
该系统旨在最终取代 <lib ../>
指令、Blob Store 以及其他将插件和自定义组件部署到 Solr 的方法。
该系统目前被认为是实验性的,因此请谨慎使用。必须在启动时通过系统参数启用才能使用。有关详细信息,请参阅包管理部分。
有了此功能,Solr 的 Blob Store 功能现在已被弃用,并很可能在 9.0 版本中删除。
安全
以下混合的更改都是为了使 Solr 在开箱即用时更加安全。
-
Solr 的
_default
配置集中的solrconfig.xml
文件已删除以下先前预配置的项目-
所有
<lib …/>
指令。这意味着 Solr Cell(又名 Tika)、Learning to Rank、Clustering(使用 Carrot2)、语言识别和 Velocity(用于/browse
示例搜索界面)不再开箱即用启用。 -
/browse
、/tvrh
和/update/extract
请求处理程序。 -
词向量组件。
-
XSLT 和 Velocity 响应编写器。
所有这些项目都可以通过手动编辑
solrconfig.xml
将它们添加回来,或者使用Config API添加到您的 Solr 实现中。sample_techproducts_configs
和./example
中的示例保持不变。
-
-
使用不安全的 Configset API(即,未启用身份验证时)上传的配置集被视为“不受信任的配置集”。
为了增强 Solr 的开箱即用安全性,这些不受信任的配置集不再允许使用
<lib …/>
指令来实现模块或自定义 Jar。升级到 8.4 时,如果您正在使用包含
<lib ../>
指令的不受信任的配置集,它们对应的集合将不会加载(它们将停止工作)。在这种情况下,您有几个选择 -
我们的默认 Jetty 配置已更新为现在默认设置内容安全策略 (CSP)。有关如何配置的详细信息,请参阅
./server/etc/jetty.xml
。由于此更改,Solr 的 HTTP 服务器提供的任何包含内联 JavaScript 的自定义 HTML 都不会再在现代浏览器中执行。您的选择是
-
更改您的 JavaScript 代码,使其不再内联运行;
-
编辑
jetty.xml
以删除 CSP(创建较弱的安全保护); -
使用反向代理删除/更改标头。
-
-
Solr 的 Blob Store 和运行时库功能现已弃用,计划在 9.0 版本中从 Solr 中删除。它已被新的包管理系统取代。
-
Velocity 响应编写器现在也已弃用,并计划在 9.0 版本中从 Solr 中删除。
禁用分组的折叠
将CollapsingQueryParser与结果分组一起使用从未被支持,因为它会导致不一致的行为和 NullPointerException 错误。我们现在明确禁止这种组合以防止这些错误。如果您一起使用它们,您将需要修改您的查询。
SolrJ
-
SolrJ 现在支持单分片场景的
shards.preference
参数,以确保多分片和单分片请求路由以相同的方式工作。有关详细信息,请参阅云请求路由和shards.preference 参数。
-
为了支持结构化解释,
QueryResponse.getExplainMap()
的类型已从Map<String, String>
更改为Map<String, Object>
。预计此更改大多是向后兼容的。由于类型擦除,编译后的第三方组件将以相同的方式工作,但可能需要更改源代码。
-
副本路由代码已移动到 SolrJ,使这些类在必要时可供客户端使用。
流式表达式
-
添加了一个新的 DBSCAN 聚类流评估器。
-
precision
流评估器现在可以对矩阵进行操作。 -
random
流表达式现在可以创建 x 轴。
JSON Facets
-
添加了两个新的聚合:
missing
和countvals
。 -
多个聚合现在支持多值字段:
min
、max
、avg
、sum
、sumsq
、stddev
、variance
和percentile
。
缓存
-
在 8.3 中添加
CaffeineCache
后,旧的 SolrCache 实现已弃用,并很可能在 9.0 中删除。鼓励用户尽快将其缓存配置转换为使用
org.apache.solr.search.CaffeineCache
。
Solr 8.3
有关 Solr 8.3 的主要新功能概述,请参阅8.3 发行说明。
升级到 8.3.x 时,用户应注意 8.2 版本的以下主要更改。
JWT 身份验证
JWT 身份验证现在支持多个身份提供程序。为了允许这样做,参数 jwkUrl
已被弃用,并替换为 jwksUrl
。使用 jwkUrl
的实现将继续正常工作,但用户应计划尽快将其配置转换为使用 jwksUrl
。
缓存
-
Solr 有一个新的缓存实现
CaffeineCache
,现在建议使用它而不是其他缓存。预计此缓存通常会为大多数用户提供更低的内存占用、更高的命中率和更好的多线程性能。由于缓存对 Solr 实现的性能有直接影响,因此在生产环境中切换到任何新的缓存实现之前,请务必测试您的环境和流量模式,以便您完全了解更改的后果。
-
一个新的参数
maxIdleTime
允许自动驱逐在定义的时间内未使用的缓存项。这允许缓存释放一些内存,并应帮助那些想要或需要微调其缓存的用户。
有关这些和其他缓存选项和参数的更多详细信息,请参阅缓存和查询预热部分。
Solr 8.2
有关 Solr 8.2 的主要新功能概述,请参阅8.2 发行说明。
升级到 8.2.x 时,用户应注意 v8.1 版本的以下主要更改。
ZooKeeper 3.5.5
Solr 8.2 将 Solr 附带的 ZooKeeper 版本更新为 v3.5.5。
建议为 Solr 设置的外部集群也更新到 ZooKeeper 3.5.5。
此 ZooKeeper 版本包含许多新的安全功能。为了使 Solr 的 Admin UI 与 3.5.5 一起工作,zoo.cfg
文件必须允许访问 ZooKeeper 的“四个字母命令”。至少必须启用 ruok
、conf
和 mntr
,但如果您选择,也可以选择启用其他命令。有关详细信息,请参阅ZooKeeper 集群的配置部分。
在 8.3 之前,SOLR-13672 导致 Admin UI 中的 ZK 状态屏幕无法报告状态。这只会影响 UI,ZooKeeper 仍然可以正常运行。 |
路由别名
-
路由别名现在使用集合属性来标识属于别名的集合;在 8.2 之前,这些别名使用核心属性。
这是向后兼容的,使用先前版本创建的别名将继续工作。但是,新集合将不再将
routedAliasName
属性添加到core.properties
文件,因此任何依赖于此位置的外部代码都需要更新。
-
时间路由别名现在在集合名称中包含
TRA
后缀,模式为<alias>_TRA_<timestamp>
。
使用旧版本创建的集合将继续工作。
分布式跟踪支持
此版本增加了对跟踪 Solr 中请求的支持。请查看分布式跟踪部分,了解有关如何配置此功能的详细信息。
Solr 8.1
有关 Solr 8.1 的主要新功能概述,请参阅8.1 发行说明。
升级到 8.1.x 时,用户应注意 v8.0 版本的以下主要更改。
全局 maxBooleanClauses 参数
-
maxBooleanClauses
参数的行为已更改,以减少处理病态查询字符串时指数查询扩展的风险。现在在节点级别强制执行 1024 个子句的默认上限。这是 7.0 之前的默认设置,可以使用
solr.xml
中的新全局参数覆盖此上限。无论是由用户(或客户端)显式定义,还是由 Solr 和 Lucene 内部创建,此限制都将强制用于所有查询。在
solrconfig.xml
中有一个相同的参数,用于限制用户(或客户端)显式定义的查询大小,但是每个集合的限制仍然会受到solr.xml
中设置的全局限制的约束。如果您的用例需要在查询中使用大量的 OR 或 AND 子句,那么在升级到 8.1 后,您可能需要调整全局的
maxBooleanClauses
参数,因为在 7.0 和 8.1 之间,此限制实际上是无界的。有关新参数的更多信息,请参阅maxBooleanClauses部分。
安全
-
现在支持 JSON Web Tokens (JWT) 进行身份验证。这允许 Solr 通过外部身份提供者(如启用了 OpenID Connect 的 IdP)断言用户已通过身份验证。有关更多信息,请参阅JWT 身份验证插件部分。
-
添加了一个新的安全插件用于审计日志记录。默认类
SolrLogAuditLoggerPlugin
可用,并在security.json
中进行配置。如有需要,也可以扩展基类以添加自定义审计插件。有关更多信息,请参阅审计日志记录部分。
集合 API
-
Collections API 中的 REQUESTSTATUS 命令的输出现在将在 “success” 或 “failed” 键中包含内部异步请求(如果有)。
-
CREATE 命令现在会在命令失败时返回相应的状态代码(4xx、5xx 等)。以前,即使失败,它也总是返回
0
。 -
MODIFYCOLLECTION 命令现在接受一个属性,将集合设置为只读。这可用于阻止集合接收任何更新,同时仍然允许提供查询服务。有关如何使用它的详细信息,请参阅MODIFYCOLLECTION部分。
-
新的 RENAME 命令允许通过使用新名称设置一对一别名来重命名集合。有关更多信息,请参阅RENAME部分。
-
新的 REINDEXCOLLECTION 命令允许将源集合中现有的存储字段索引到新集合中。有关更多信息,请参阅REINDEXCOLLECTION部分。
日志记录
-
默认的 Log4j2 日志模式已从同步更改为异步。这将提高日志吞吐量并减少系统争用,但代价是轻微的可能性,即在 Solr 异常终止时可能会错过某些日志消息。
如果即使这种轻微的风险也是不可接受的,则在
server/resources/log4j2.xml
中找到的 Log4j 配置文件中,同步日志配置位于注释部分中,可以编辑该文件以重新启用同步日志记录。
指标
-
SolrGangliaReporter 已从 Solr 中删除。Solr 使用的指标库 Dropwizard Metrics 已更新到版本 4,并且由于依赖于 LGPL 许可证,Ganglia 支持已从中删除。
浏览 UI (Velocity)
-
Velocity 和 Velocity Tools 都在此版本中进行了升级。Velocity 从 1.7 升级到 2.0。有关升级信息,请参阅https://velocity.apache.org/engine/2.0/upgrading.html。Velocity Tools 从 2.0 升级到 3.0。有关详细信息,请参阅https://velocity.apache.org/tools/3.0/upgrading.html 获取有关升级的详细信息。
默认垃圾回收器 (GC)
-
Solr 的默认 GC 已从 CMS 更改为 G1。如果您更喜欢使用 CMS 或任何其他 GC 方法,可以修改
solr.in.sh
(*nix) 或solr.in.cmd
(Windows) 的GC_TUNE
部分。