项目引入Solr时应该考虑的问题在项目中引入Solr搜索引擎之前,需要从多个维度进行评估和规划,以确保系统能够满足业务需求并具有良好的性能表现。
核心考虑因素1. 数据更新频率
每天数据增量有多大
随时更新还是定时更新
2. 数据总量
数据要保存多长时间
预期的数据增长规模
3. 一致性要求
期望多长时间内看到更新的数据
最长允许多长时间延迟
4. 数据特点
数据源包括哪些
平均单条记录大小
5. 业务特点
有哪些排序要求
主要的检索条件
6. 资源复用
已有的硬件配置是怎样的
是否有升级计划
Solr入门:5分钟快速上手
这个练习将指导您在短短5分钟内开始使用Solr!通过这个快速入门教程,您将体验到Solr的核心功能。
启动Solr云模式启动第一个节点要启动Solr,请运行:
Unix或MacOS:bin/solr start -c
Windows:bin\solr.cmd start -c
参数 -c 表示以SolrCloud模式启动,这是Solr的分布式模式。
启动第二个节点(可选)要启动另一个Solr节点并让它加入第一个节点组成集群:
1$ bin/solr start -c -z localhost:9983 -p 8984
参数说明:
-c:以SolrCloud模式启动
-z localhost:9983:连接到ZooKeeper(第一个节点自动启动的)
-p 8984:使用端口8984(避免与第一个节点的8983端口冲突)
创建集合就像数据库系统将数据保存在表中一样,Solr将...
Solr Performance Factors(Solr 性能因素)
Schema Design Considerations(数据模型方面考虑)Indexed Fieldsindexed fields 的数量将会影响以下的一些性能:
索引时的时候的内存使用量
索引段的合并时间
优化时间
索引的大小
我们可以通过设置 omitNorms="true" 来减少indexed fields数量增加所带来的影响。
Stored FieldsRetrieving the stored fields 确实是一种开销。这个开销,受每个文档所存储的字节影响很大。每个文档的所占用的空间越大,文档就显的更稀疏,这样从硬盘中读取数据,就需要更多的 I/O 操作(通常,我们在存储比较大的域的时候,就会考虑这样的事情,比如存储一篇文章的文档)。
可以考虑将比较大的域放到 Solr 外面来存储。如果你觉得这样做会有些别扭的话,可以考虑使用压缩的...
Apache Solr 9.9.0 发布:AI 向量化与性能突破
Apache Solr 9.9.0 重大版本发布2025年7月24日,Apache Solr 项目发布了 9.9.0 版本,这是一个里程碑式的更新,标志着 Solr 在人工智能集成和分布式性能优化方面取得重大突破。
原文动态翻译Apache Solr 9.9.0 现已可用。此版本的主要亮点包括:
文本向量化编码:使用外部大语言模型(LLM)服务进行文本到向量的转换
增强的模糊查询和排序查询:提供更精确的搜索体验
基于 JavaScript 的函数查询:支持更灵活的查询逻辑
Jetty 优雅关闭支持:提升服务器停机时的稳定性
PKI 认证缓存改进:显著提升认证性能
多种查询类型的性能优化:全面提升查询响应速度
SolrJ 客户端改进:增强 Java 客户端的易用性和性能
分布式完善分析1. 外部 LLM 服务集成的分布式影响重要性评估:★★★★★
文本向量化编码功能的引入是 Sol...
Solr部署:熔断器机制配置与系统保护完整指南
Solr部署:熔断器机制配置与系统保护完整指南概述Solr的熔断器基础设施允许防止可能导致节点超出其容量或宕机的操作。熔断器的前提是确保更高的服务质量,仅接受在当前资源配置下可服务的请求负载。
熔断器使用场景核心权衡当用户希望以请求吞吐量换取更高的Solr稳定性时,应该使用熔断器。如果启用了熔断器,在节点高负载条件下,请求可能会被拒绝并返回HTTP错误代码429 ‘Too Many Requests’。
客户端责任客户端需要处理此错误并可能构建重试逻辑,因为这应该是一种短暂的情况。
警告模式单个熔断器也可以在”仅警告”模式下启用。超过阈值的”仅警告”熔断器会被记录,但不会用于阻止或短路请求。这可以用作在不影响流量的情况下调整熔断器阈值的方法。
分片集合中的行为在对分片集合的请求中,仅在处理初始请求的节点上检查熔断器,而不针对节点间请求。因此,建议在Solr节点间对客户端请求进行负载均...
Solr部署:SolrCloud分布式请求路由与容错机制深度解析
Solr部署:SolrCloud分布式请求路由与容错机制深度解析概述当Solr节点接收到搜索请求时,请求会自动路由到作为被搜索集合一部分的分片副本。选定的副本充当聚合器:它创建对集合中每个分片的随机选择副本的内部请求,协调响应,根据需要发出任何后续内部请求(例如,细化分面值或请求其他存储字段),并为客户端构造最终响应。
分布式请求处理流程请求路由机制
接收请求:Solr节点接收搜索请求
选择副本:自动路由到集合分片的副本
聚合处理:被选中的副本作为聚合器执行以下操作:
创建对每个分片随机副本的内部请求
协调各分片的响应
执行后续内部请求(分面细化、字段获取等)
构造客户端的最终响应
负载均衡机制SolrCloud集群中每个节点都会在集合的所有副本之间进行读请求负载均衡。您可能仍需要外部负载均衡器与集群通信,或需要能够读取和交互Solr在ZooKeeper中的元数据的客户端。
智...
Solr部署:Kerberos认证插件配置与企业安全集成指南
Solr部署:Kerberos认证插件配置与企业安全集成指南概述如果您正在使用Kerberos来保护网络环境,Kerberos认证插件可用于保护Solr集群。该插件允许Solr使用Kerberos服务主体和keytab文件来验证ZooKeeper身份以及Solr集群节点之间的通信。
管理界面用户和所有客户端(如SolrJ)在使用界面或向Solr发送请求之前,也需要拥有有效的票证。
支持范围Kerberos认证支持以下安装类型:
SolrCloud集群
用户管理的分布式部署
单节点安装
与Hadoop集成的特殊说明如果您正在将Solr与受Kerberos保护的Hadoop集群一起使用,并且打算将Solr索引存储在HDFS中,除了本页说明外,还需要参考”Running Solr on HDFS”部分的额外配置步骤。
重要区别:
本页说明适用于Solr本身需要Kerberos保护的场...
Solr部署:JWT认证插件配置与OpenID Connect集成完整指南
Solr部署:JWT认证插件配置与OpenID Connect集成完整指南概述Solr支持通过JWTAuthPlugin实现基于JSON Web Token (JWT) 的Bearer认证。这允许Solr验证用户已通过外部身份提供者(Identity Provider, IdP)进行身份验证,通过验证JWT格式的访问令牌的数字签名来确认用户身份。
典型应用场景是将Solr与启用了OpenID Connect的身份提供者集成。
模块要求JWT认证功能通过jwt-auth Solr模块提供,使用前需要先启用该模块。
启用JWT认证基本配置要使用JWT Bearer认证,security.json文件必须包含定义认证类和配置参数的authentication部分。
最简单的配置示例:
123456{ "authentication": { &...
Solr索引:枚举字段类型与预定义排序完整指南
Solr索引:枚举字段类型与预定义排序完整指南概述EnumFieldType允许定义一个具有封闭值集合的字段,其排序顺序是预先确定的,既不是字母序也不是数字序。这种字段类型特别适用于严重程度列表、风险定义等具有固定层次结构的数据。
枚举字段的应用场景典型使用案例优先级别:
1Not Available → Low → Medium → High → Urgent
风险等级:
1Unknown → Very Low → Low → Medium → High → Critical
订单状态:
1Pending → Processing → Shipped → Delivered → Cancelled
核心优势
预定义排序:按业务逻辑排序,非字母或数字顺序
类型安全:限制为预定义的值集合
性能优化:内部使用数字表示,查询和排序效率高
业务语义:直观表达业务层次关系
版本说明弃用...
Solr索引:DocValues列式存储原理与性能优化详解
Solr索引:DocValues列式存储原理与性能优化详解概述DocValues是Solr内部记录字段值的一种高效方式,专门针对排序、分面搜索等场景进行优化,相比传统的倒排索引在特定用途上更加高效。
DocValues采用列式存储结构,在索引时构建文档到值的映射关系,为现代搜索应用的核心功能提供了强有力的性能支撑。
DocValues存在的必要性传统倒排索引的局限性Solr的标准索引构建方式是倒排索引:
建立索引中所有文档发现的词项列表
每个词项旁边是包含该词项的文档列表
记录词项在文档中的出现次数
这种结构使搜索极其快速,但对于现代搜索的其他核心功能存在效率问题:
排序、分面、高亮的性能瓶颈以分面搜索为例,分面引擎必须:
查找结果集中每个文档出现的每个词项
提取文档ID以构建分面列表
在内存中维护这些信息
这个过程可能非常缓慢(取决于文档数量、词项数量等)。
DocValu...
Solr索引:外部文件处理与预分析字段类型详解
Solr索引:外部文件处理与预分析字段类型详解概述Solr提供了两种特殊的字段类型来处理非常规的数据存储和处理需求:
ExternalFileFieldType:支持在外部文件中存储字段值
PreAnalyzedFieldType:支持接收已经经过分析处理的token流
这两种字段类型为特定场景下的数据处理提供了灵活的解决方案。
ExternalFileField类型弃用警告ExternalFileField已被弃用,将在未来版本中移除。对于数值字段,建议使用就地更新(in-place updates)功能。
工作原理ExternalFileField类型允许在Solr索引外部的文件中指定字段值。该字段的文件包含从键字段到字段值的映射关系。
与在文档索引时指定字段不同,Solr从外部文件中查找该字段的值。
重要限制
外部字段不可搜索
只能用于函数查询或显示
适用于需要频繁更新特定...
Solr索引:去重处理机制与重复文档检测完整指南
Solr索引:去重处理机制与重复文档检测完整指南概述在构建搜索索引时,重复或近似重复的文档是一个常见且重要的问题。Solr提供了强大的去重处理功能,可以有效防止重复文档进入索引,或为文档添加签名标识以便进行重复字段折叠。
去重处理通过使用低碰撞或模糊哈希算法来实现,Solr原生支持通过Signature类实现这类去重技术,并允许轻松添加新的哈希/签名实现。
签名算法类型Solr支持多种签名实现方式:
1. MD5Signature
特点:128位哈希,用于精确重复检测
适用场景:需要完全精确匹配的场景
性能:计算相对较慢,但准确性高
2. Lookup3Signature
特点:64位哈希,用于精确重复检测
适用场景:需要精确匹配且性能要求较高
优势:比MD5快得多,索引存储空间更小
3. TextProfileSignature
特点:来自Apache Nutch的模...
Solr部署:日志配置与管理完整指南
Solr部署:日志配置与管理完整指南Solr日志是了解系统状况的关键方式。有多种方法可以调整默认日志配置,满足不同场景的需求。本文将详细介绍Solr的日志配置和管理方法。
临时日志设置在需要时有多种方法可以临时更改日志级别,无需重启Solr服务。
使用管理界面设置日志您可以使用管理界面临时更改Solr的日志输出量。在左侧菜单中选择Logging链接。
注意:日志级别将在下次Solr重启时重置。
管理界面操作步骤
访问日志界面:点击管理界面左侧的”Logging”链接
选择日志级别:选择 Logging → Level 查看日志级别菜单
设置级别:点击右列的当前级别,出现日志级别菜单,选择所需级别
界面特点
分层结构:Solr类在左列显示为表示类路径的目录树结构
当前级别:右列显示当前级别
级别继承:未设置的类别将具有其父级的日志级别
批量设置:通过调整父级日志级别可以一次更改多...
Solr部署:ZooKeeper集群配置完整指南与最佳实践
Solr部署:ZooKeeper集群配置完整指南与最佳实践虽然Solr捆绑了Apache ZooKeeper,但强烈建议您在生产环境中使用外部ZooKeeper设置。
使用Solr的嵌入式ZooKeeper实例适合入门,但不应在生产环境中使用,因为它不提供任何故障转移:如果承载ZooKeeper的Solr实例关闭,ZooKeeper也会关闭。任何依赖它的分片或Solr实例都无法与它或彼此通信。
解决这个问题的方案是建立外部ZooKeeper集群(ensemble),这是运行ZooKeeper的多个服务器,它们相互通信以协调集群活动。
ZooKeeper节点数量规划节点数量原则规划ZooKeeper节点数量时,需要记住ZooKeeper集群的主要原则是维护服务器的多数来服务请求。这个多数被称为仲裁(quorum)。
ZooKeeper管理员指南引用:“要使ZooKeeper服务处于活...
Solr部署:Prometheus和Grafana监控系统完整搭建指南
Solr部署:Prometheus和Grafana监控系统完整搭建指南如果您使用Prometheus和Grafana进行指标存储和数据可视化,Solr提供了两种解决方案来收集指标和其他数据:
Prometheus Exporter:功能丰富的导出器,支持自定义配置
带Prometheus格式的Metrics API:原生支持,更高效但配置固化
本文将详细介绍如何配置和使用这两种方案来构建完整的Solr监控系统。
监控方案概述Prometheus Exporter特性Prometheus导出器(solr-exporter)不仅可以监控来自Metrics API的Solr指标,还可以监控:
来自分面查询的分面计数
Collections API命令响应
Ping请求响应
自定义查询结果
Metrics API Prometheus格式Metrics API提供了Prometheu...
Solr部署:生产环境部署完整指南与最佳实践
Solr部署:生产环境部署完整指南与最佳实践本文提供了在*nix平台(如Ubuntu)上设置Solr生产环境运行的详细指南。我们将详细介绍在Linux主机上设置单个Solr实例的过程,然后提供在同一主机上支持多个Solr节点运行的技巧。
服务安装脚本概述Solr包含一个服务安装脚本(bin/install_solr_service.sh),帮助您在Linux上将Solr安装为服务。目前,该脚本仅支持CentOS、Debian、Red Hat、SUSE和Ubuntu Linux发行版。
预安装规划在运行脚本之前,需要确定设置的几个参数:
Solr安装位置
拥有Solr文件和进程的系统用户
目录结构规划我们建议将活动Solr文件(如日志和索引文件)与Solr发行包中包含的文件分开,因为这使得升级Solr更容易,也被认为是系统管理员应遵循的良好实践。
Solr安装目录默认情况下,服务安...
Solr部署:基础认证插件配置与使用指南
Solr部署:基础认证插件配置与使用指南Apache Solr的基础认证插件(BasicAuthPlugin)提供了基于用户名和密码的简单身份认证机制。本文将详细介绍如何配置和使用基础认证插件,确保Solr服务的安全访问。
基础认证插件概述基础认证插件只提供用户认证功能。如需控制用户权限,还需要配置授权插件,如基于规则的授权插件。基础认证使用HTTP Basic Authentication标准,支持用户名密码验证。
主要特性
简单易用:基于标准HTTP Basic Authentication
灵活管理:支持动态添加、修改和删除用户
API支持:提供RESTful API进行用户管理
集群支持:在SolrCloud环境中统一管理用户
多方案兼容:可与其他认证方案组合使用
启用基础认证创建security.json文件要使用基础认证,必须首先创建security.json文件。该文...
Solr部署:Docker容器化部署完整指南
Solr部署:Docker容器化部署完整指南Docker容器化技术为Apache Solr提供了便捷、可扩展、易管理的部署方式。本文将全面介绍如何在Docker环境中部署和管理Solr,从简单的单机部署到复杂的生产级集群配置。
Docker镜像概述支持版本以下说明适用于solr:8.0.0及更高版本。完整的标签和架构列表请参考Docker Hub页面。
可用镜像类型每个Solr版本发布时都提供两种Docker镜像,分别对应完整版和精简版的二进制发行包:
镜像类型
镜像标签
特点
完整版
solr:<version>
包含所有功能和依赖,适合开发和功能完整的生产环境
精简版
solr:<version>-slim
体积较小,移除了某些可选组件,适合资源受限的环境
有关每种发行版的详细信息,请参考可用Solr包部分。
快速入门主机挂载目录运行S...
Solr部署:安全配置总览与最佳实践指南
Solr部署:安全配置总览与最佳实践指南在规划如何保护Apache Solr时,需要考虑多个方面的安全措施。本文将全面介绍Solr的安全配置选项和最佳实践,帮助您构建一个安全可靠的搜索服务。
重要安全警告
警告:Solr的任何API(包括管理界面)都不是为暴露给不受信任的第三方而设计的。请调整您的防火墙设置,确保只有受信任的计算机和人员被允许访问。因此,项目不会将管理界面的XSS问题视为安全漏洞。但是,我们仍然要求您在JIRA中报告此类问题。
这个警告强调了Solr安全的根本原则:Solr应始终部署在受保护的网络环境中,不应直接暴露在公网上。
TLS (SSL) 证书加密加密的重要性加密Solr的进出流量以及Solr节点之间的通信可以防止敏感数据在网络上泄露。TLS通常也是使用身份认证时防止凭据被窃听的要求。
配置要点
传输层保护:对所有客户端到服务器的连接启用HTTPS
节点间通...
Solr部署:SSL加密配置完整指南与安全实践
Solr部署:SSL加密配置完整指南与安全实践Apache Solr可以通过安全套接字层(SSL)加密技术来保护客户端与服务器之间以及SolrCloud模式下节点之间的通信安全。本文将详细介绍如何配置Solr SSL加密,确保数据传输的机密性和完整性。
SSL配置概述SSL(Secure Sockets Layer)是一种标准的网络安全协议,用于在网络连接中建立加密链接。在Solr环境中,SSL提供以下安全保障:
数据加密:保护传输过程中的数据不被窃听
身份认证:验证服务器和客户端的身份
数据完整性:确保数据在传输过程中未被篡改
本指南主要介绍使用自签名证书启用SSL的方法。如需了解SSL证书和密钥的背景知识,请参考SSL证书HOWTO文档。
为Solr配置SSL生成自签名证书和密钥首先,我们需要生成一个自签名证书和密钥,用于服务器和客户端的双向认证。我们将使用JDK的keyto...