Solr 7 中的主要变更

Solr 7 是 Solr 的一个主要新版本,它引入了新功能和许多其他可能会影响您现有安装的更改。

升级计划

在开始迁移您的配置和索引之前,需要考虑 Solr 7 中的重大更改。此页面旨在突出最大的更改 - 您可能需要注意的新功能,以及默认行为的更改和已删除的已弃用功能。

Solr 7 中有数百个更改,因此,全面查看 Solr 升级说明以及您 Solr 实例中的 CHANGES.txt 文件将有助于您计划迁移到 Solr 7。本节尝试突出您应该了解的一些重大更改。

您还应该考虑在您尚未升级到的任何版本中对 Solr 所做的所有更改。例如,如果您当前使用的是 Solr 6.2,则除了 7.0 的更改之外,还应查看所有后续 6.x 版本中所做的更改。

重新索引您的数据被认为是最佳实践,如果可能,您应该尝试这样做。但是,如果重新索引不可行,请记住您一次只能升级一个主要版本。因此,Solr 6.x 索引将与 Solr 7 兼容,但 Solr 5.x 索引将不兼容。

如果您现在不重新索引,请记住,您需要重新索引数据或升级索引,然后才能在将来发布时迁移到 Solr 8。

另请参阅升级 Solr 集群部分,了解有关如何升级 SolrCloud 集群的详细信息。

新功能和增强

复制模式

在 Solr 7 之前,SolrCloud 副本模型的机制是允许任何副本在主节点丢失时成为新的主节点。这对大多数用户来说非常有效,可以在集群出现问题时提供可靠的故障转移。然而,它在大集群中存在一个代价,因为所有副本必须始终保持同步。

为了提供更高的灵活性,新增了两种类型的副本,分别名为 TLOG 和 PULL。这些新类型提供了选项,让副本仅通过从主节点复制索引段来与主节点同步。TLOG 类型还有一个额外的好处,即维护事务日志(名称中的“tlog”),这使其能够在必要时恢复并成为主节点;PULL 类型不维护事务日志,因此无法成为主节点。

作为此更改的一部分,传统的副本类型现在被命名为 NRT。如果您没有显式定义 TLOG 或 PULL 副本的数量,Solr 默认创建 NRT 副本。如果此模型对您有效,您无需进行任何更改。

有关新副本模式以及如何在集群中定义副本类型的更多详细信息,请参阅副本类型部分。

自动缩放

Solr 自动缩放是 Solr 中的一套新功能,旨在使管理 SolrCloud 集群更加轻松和自动化。

其核心是,Solr 自动缩放为用户提供了一种规则语法,用于定义如何在集群中分发节点和分片的偏好和策略,目的是保持集群的平衡。从 Solr 7 开始,Solr 在确定放置使用各种 Collections API 命令创建或移动的新分片和副本的位置时,会考虑任何策略或偏好规则。

其他特性与增强

配置和默认更改

新的默认配置集

对 Solr 附带的配置集进行了一些更改;不仅包括其内容,还包括 Solr 对待它们的方式

  • data_driven_configsetbasic_configset 已被删除,并由 _default 配置集替换。sample_techproducts_configset 也保留,旨在与 Solr 随附的示例文档(位于 example/exampledocs 目录中)一起使用。

  • 创建新集合时,如果您未指定配置集,将使用 _default

    • 如果您使用 SolrCloud,_default 配置集将自动上传到 ZooKeeper。

    • 如果您运行用户托管的集群或单节点安装,则将自动创建 instanceDir,并以 _default 配置集为基础。

无模式改进

为了提高无模式模式的功能,Solr 在检测到传入字段中的数据应具有基于文本的字段类型时,现在的行为方式有所不同。

  • 默认情况下,传入字段将以 text_general 进行索引(您可以更改此设置)。字段的名称将与文档中定义的字段名称相同。

  • 将在您的模式中插入复制字段规则,以将新的 text_general 字段复制到名为 <name>_str 的新字段。此字段的类型将是 strings 字段(以允许多个值)。文本字段的前 256 个字符将被插入到新的 strings 字段。

如果您希望删除复制字段规则,或者更改插入到字符串字段的字符数,或使用的字段类型,则可以自定义此行为。有关详细信息,请参阅无模式模式部分。

由于复制字段规则可能会降低索引速度并增加索引大小,因此建议您仅在需要时才使用复制字段。如果您不需要对字段进行排序或刻面,则应删除自动生成的复制字段规则。

可以使用 update.autoCreateFields 属性禁用自动字段创建。为此,您可以使用配置 API 以及如下命令:

  • V1 API

  • V2 API

curl http://host:8983/solr/mycollection/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'
curl http://host:8983/api/collections/mycollection/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'

默认行为的更改

  • JSON 现在是默认的响应格式。如果您依赖 XML 响应,则现在必须在请求中定义 wt=xml。此外,默认情况下启用行缩进 (indent=on)。

  • sow 参数(“Split on Whitespace”的缩写)现在默认为 false,这允许开箱即用地支持多词同义词。此参数与 eDisMax 和标准/"lucene" 查询解析器一起使用。如果未将此参数显式指定为 true,则查询文本在分析之前不会按空格分割。

  • legacyCloud 参数现在默认为 false。如果 state.json 中不存在副本的条目,则不会注册该副本。

    这可能会影响那些启动副本并且它们会自动注册为分片一部分的用户。可以通过使用以下命令在集群属性中设置属性 legacyCloud=true 来回退到旧的行为:

    ./server/scripts/cloud-scripts/zkcli.sh -zkhost 127.0.0.1:2181 -cmd clusterprop -name legacyCloud -val true

  • 如果 solrconfig.xml 中的 luceneMatchVersion 为 7.0.0 或更高版本,则 eDisMax 查询解析器参数 lowercaseOperators 现在默认为 false。低于 7.0.0 的 luceneMatchVersion 的行为保持不变(即 true)。这意味着客户端必须发送大写的布尔运算符(例如 AND、OR 和 NOT)才能被识别,或者您必须显式地将此参数设置为 true

  • 如果 luceneMatchVersion 为 7.0.0 或更高版本,则 solrconfig.xml 中的 handleSelect 参数现在默认为 false。这将导致 Solr 忽略请求中存在的 qt 参数。如果您具有没有前导 '/' 的请求处理程序,则可以设置 handleSelect="true" 或考虑迁移您的配置。

    qt 参数仍然用作 SolrJ 特殊参数,用于指定要使用的请求处理程序(尾部 URL 路径)。

  • lucenePlusSort 查询解析器(也称为“旧 Lucene 查询解析器”)已弃用,不再隐式定义。如果您希望继续使用此解析器直到 Solr 8(届时将被删除),则必须在 solrconfig.xml 中注册它,如下所示:<queryParser name="lucenePlusSort" class="solr.OldLuceneQParserPlugin"/>

  • TemplateUpdateRequestProcessorFactory 的名称从 Template 更改为 templateAtomicUpdateProcessorFactory 的名称从 Atomic 更改为 atomic

    • 此外,TemplateUpdateRequestProcessorFactory 现在使用 {} 而不是 ${} 作为 template

弃用和删除的功能

点字段是默认的数值类型

Solr 已经全面实现了 *PointField 类型,以替换基于 Trie* 的数值字段。所有 Trie* 字段现在都被认为是已弃用的,并且将在 Solr 8 中删除。

如果您在模式中使用 Trie* 字段,则应尽快考虑迁移到 PointFields。更改为新的 PointField 类型将需要您重新索引数据。

空间字段

以下与空间相关的字段已被弃用

  • LatLonType

  • GeoHashField

  • SpatialVectorFieldType

  • SpatialTermQueryPrefixTreeFieldType

请选择以下字段类型之一:

  • LatLonPointSpatialField

  • SpatialRecursivePrefixTreeField

  • RptWithGeometrySpatialField

有关详细信息,请参阅空间搜索部分。

JMX 支持和 MBean

  • 已删除 solrconfig.xml 中的 <jmx> 元素,取而代之的是在 solr.xml 中定义的 <metrics><reporter> 元素。

    如果缺少 SolrJmxReporter 并且找到了本地 MBean 服务器,则通过自动添加默认实例来提供有限的向后兼容性。可以通过 solr.in.sh 中的 ENABLE_REMOTE_JMX_OPTS 或通过系统属性(例如 -Dcom.sun.management.jmxremote)激活本地 MBean 服务器。此默认实例将从所有注册表导出所有 Solr 指标,作为分层 MBean。

    通过指定一个将布尔初始化参数 enabled 设置为 falseSolrJmxReporter 配置也可以禁用此行为。对于更精细的控制,用户应至少显式指定一个 SolrJmxReporter 配置。

    另请参阅 <metrics><reporters> 元素部分,其中介绍了如何在 solr.xml 中设置指标报告器。请注意,Solr 8 中可能会删除向后兼容性支持。

  • MBean 名称和属性现在遵循指标中使用的分层名称。这也反映在 /admin/mbeans/admin/plugins 输出中,并且可以在 UI 插件选项卡中观察到,因为现在所有这些 API 都从指标 API 获取数据。旧的(主要是平面的)JMX 视图已被删除。

SolrJ

在 SolrJ 中进行了以下更改。

  • HttpClientInterceptorPlugin 现在是 HttpClientBuilderPlugin,并且必须与 SolrHttpClientBuilder 而不是 HttpClientConfigurer 一起使用。

  • HttpClientUtil 现在允许通过 SolrHttpClientBuilder 而不是 HttpClientConfigurer 配置 HttpClient 实例。不再使用环境变量 SOLR_AUTHENTICATION_CLIENT_CONFIGURER,请使用 SOLR_AUTHENTICATION_CLIENT_BUILDER

  • SolrClient 实现现在使用其自身的内部配置来设置套接字超时、连接超时和允许重定向,而不是在构建 HttpClient 实例时设置为默认值的内容。请在 SolrClient 实例上使用适当的 setter。

  • HttpSolrClient#setAllowCompression 已被删除,并且必须作为构造函数参数启用压缩。

  • HttpSolrClient#setDefaultMaxConnectionsPerHostHttpSolrClient#setMaxTotalConnections 已被删除。现在默认值非常高,只能在创建 HttpClient 实例时通过参数进行更改。

其他弃用和删除

  • 不再支持架构中的 defaultOperator 参数。请改用 q.op 参数。此选项已在多个版本中被弃用。有关详细信息,请参阅标准查询解析器参数部分。

  • 不再支持架构中的 defaultSearchField 参数。请改用 df 参数。此选项已在多个版本中被弃用。有关详细信息,请参阅标准查询解析器参数部分。

  • 已删除 mergePolicymergeFactormaxMergeDocs 参数,不再支持。您应该改为定义 mergePolicyFactory。有关详细信息,请参阅mergePolicyFactory 部分。

  • PostingsSolrHighlighter 已被弃用。建议您改用 UnifiedHighlighter。有关此高亮器的详细信息,请参阅统一高亮器部分。

  • 索引时提升已从 Lucene 中移除,并且不再在 Solr 中可用。如果提供了任何提升,索引链将忽略它们。作为替代方案,索引时评分因子应在单独的字段中索引,并使用函数查询与查询得分组合。有关详细信息,请参阅函数查询部分。

  • StandardRequestHandler 已被弃用。请改用 SearchHandler

  • 为了提高 Collections API 中的参数一致性,MOVEREPLICA 命令的参数名称 fromNode 以及 REPLACENODE 命令的参数名称 sourcetarget 已被弃用,并分别替换为 sourceNodetargetNode。旧名称将继续工作以实现向后兼容,但它们将在 Solr 8 中被删除。

  • 未使用的 valType 选项已从 ExternalFileField 中删除,如果您的 schema 中有此选项,可以安全地将其删除。

早期 6.x 版本的主要更改

以下是早期 6.x 版本更改的摘要,重点介绍了 Solr 6.0 和 6.6 之间发布的重大更改,这些更改在之前的本指南版本中列出。如上文各节所述,对弃用的提及很可能已被 Solr 7 中的删除所取代。

再次注意,这并非可能影响您安装的所有更改的完整列表,因此如果从早于 6.6 的任何版本升级,强烈建议您彻底查看 CHANGES.txt。

  • Solr contribs map-reducemorphlines-coremorphlines-cell 已被删除。

  • JSON Facet API 现在使用 hyper-log-log 进行 numBuckets 基数计算,并在通过任何大于 1 的 mincount 过滤桶之前计算基数。

  • 如果您使用历史日期,特别是 1582 年或之前的日期,则应重新索引以获得更好的日期处理。

  • 如果您使用带有 method=stream 的 JSON Facet API (json.facet),您现在必须设置 sort='index asc' 才能获得流式行为;否则它不会流式传输。提示:method 是一个提示,不会更改其他参数的默认值。

  • 如果您使用 JSON Facet API (json.facet) 对数字字段进行分面,并且您使用 mincount=0 或者您设置了前缀,您现在将收到错误,因为这些选项与数字分面不兼容。

  • Solr 在 INFO 级别的日志记录详细程度已大大降低,您可能需要更新日志配置以使用 DEBUG 级别才能看到以前在 INFO 级别看到的所有日志消息。

  • 我们不再永久备份带有日期戳的 solr.logsolr_gc.log 文件。如果您依赖于 logs 文件夹中的 solr_log_<date>solr_gc_log_<date>,情况将不再如此。有关 Solr 6.3 及更高版本中日志轮换如何工作的详细信息,请参阅配置日志记录部分。

  • MiniSolrCloudCluster 上的 create/deleteCollection 方法已弃用。客户端应改为使用 CollectionAdminRequest API。此外,MiniSolrCloudCluster#uploadConfigDir(File, String) 已被弃用,建议使用 #uploadConfigSet(Path, String)

  • bin/solr.in.sh (Windows 上为 bin/solr.in.cmd) 现在默认情况下完全被注释掉。以前情况并非如此,这会掩盖现有的环境变量。

  • _version_ 字段不再被索引,现在默认定义为 indexed=false,因为该字段启用了 DocValues。

  • /export 处理程序已更改,因此对于原始文档中不存在的数字字段,它不再返回零 (0)。此更改的一个后果是,您必须注意,如果原始文档中没有值,某些元组将没有值。

  • org.apache.solr.util.stats 中的指标相关类已被删除,取而代之的是 Dropwizard 指标库。任何使用这些类的自定义插件都应更改为使用指标库中的等效类。作为此操作的一部分,对 Overseer Status API 的输出进行了以下更改

    • "totalTime" 指标已被删除,因为它不再受支持。

    • Overseer Status API 中的指标 "75thPctlRequestTime"、"95thPctlRequestTime"、"99thPctlRequestTime" 和 "999thPctlRequestTime" 已重命名为 "75thPcRequestTime"、"95thPcRequestTime" 等,以便与 Solr 其他部分的统计输出保持一致。

    • 指标 "avgRequestsPerMinute"、"5minRateRequestsPerMinute" 和 "15minRateRequestsPerMinute" 已被相应的每秒速率取代,即 "avgRequestsPerSecond"、"5minRateRequestsPerSecond" 和 "15minRateRequestsPerSecond",以便与 Solr 其他部分的统计输出保持一致。

  • 添加了一个名为 UnifiedHighlighter 的新高亮器。建议您通过设置 hl.method=unified 来尝试 UnifiedHighlighter 并报告反馈。它比其他高亮器更高效/更快,尤其是与原始高亮器相比。请参阅 HighlightParams.java 以获取带有注释的突出显示参数列表,这些参数由哪些突出显示器使用。hl.useFastVectorHighlighter 现在被认为是弃用的,取而代之的是 hl.method=fastVector

  • maxWarmingSearchers 参数 现在默认为 1,更重要的是,如果超出此限制,提交现在将阻止而不是抛出异常(这是一件好事)。因此,不再存在重叠提交的风险。尽管如此,用户仍应继续避免过度提交。建议用户从其 solrconfig.xml 文件中删除任何预先存在的 maxWarmingSearchers 条目。

  • 复杂短语查询解析器现在支持前导通配符。请注意其可能的沉重负担,建议用户在索引时分析中使用 ReversedWildcardFilter。

  • JMX 指标 "avgTimePerRequest" (以及每个处理程序的指标 API 中的相应指标)曾经是基于总累积时间和请求数量的简单非衰减平均值。Codahale Metrics 实现将指数衰减应用于此值,这使得平均值严重偏向于最近 5 分钟。

  • Parallel SQL 现在使用 Apache Calcite 作为其 SQL 框架。作为此更改的一部分,默认聚合模式已更改为 facet 而不是 map_reduce。SQL 聚合响应和一些 SQL 语法也发生了变化。有关完整详细信息,请参阅SQL 查询语言文档。