Solr部署:审计日志Solr具有记录进入系统的所有HTTP请求审计跟踪的能力。审计记录器是可插拔的,以适应任何可能的格式或日志目标。
审计跟踪(也称为审计日志)是与安全相关的按时间顺序记录、记录集合和/或记录的目标和来源,它们提供了影响特定操作、过程、事件或设备的活动序列的书面证据。
——维基百科
配置审计日志审计日志在security.json中的auditlogging键下配置。
下面的示例使用插件默认值配置同步审计日志到Solr的默认日志文件。
12345{ "auditlogging":{ "class": "solr.SolrLogAuditLoggerPlugin" }}
默认情况下,任何审计日志插件将在后台异步记录以避免减慢请求速度。要使审计日...
Solr部署:别名
Solr部署:别名SolrCloud具有通过替代名称查询一个或多个集合的能力。这些集合的替代名称称为别名,在您想要时非常有用:
原子地切换到使用新(重新)索引的集合,零停机时间(通过重新定义别名)
将客户端编程与集合名称变化隔离
对具有相同模式的多个集合发出单个查询
有两种类型的别名:标准别名和路由别名。在路由别名中,有两种类型:类别路由别名和时间路由别名。本节讨论这些类型。
可以向别名发送集合更新命令,但只能发送到那些解析为单个集合的别名,或那些定义多个集合之间路由的别名(路由别名)。在其他情况下,更新命令会被拒绝并显示错误,因为没有逻辑来在多个集合之间分发文档。
标准别名标准别名使用CREATEALIAS命令创建和更新。
作为别名成员的当前集合列表可以通过CLUSTERSTATUS命令验证。
所有别名的完整定义,包括关于该别名的元数据(在路由别名的情况下,见下文)可以通过LI...
Solr部署:别名管理
Solr部署:别名管理集合别名是Solr与普通集合相同对待的虚拟集合。别名集合可以指向一个或多个真实集合。
集合别名的一些使用场景:
时间序列数据
在后台重新索引内容
有关Solr中别名的概述,请参见别名部分。
CREATEALIAS:为集合创建或修改别名CREATEALIAS操作将创建指向一个或多个集合的新别名。别名有两种类型:标准别名和路由别名。
标准别名很简单:CREATEALIAS用命令提供的一个或多个集合的名称注册别名名称。如果现有别名存在,它将被替换/更新。
标准别名可以作为重命名集合的手段,也可以用于原子地交换哪个支持/底层集合对各种目的来说是”活跃的”。
当Solr搜索指向多个集合的别名时,Solr将搜索所有集合的所有分片作为聚合整体。虽然可以向跨越多个集合的别名发送更新,但标准别名没有在引用集合之间分发文档的逻辑,因此所有更新都将发送到列表中...
Solr查询:块连接查询解析器
Solr查询:块连接查询解析器有两个支持块连接的查询解析器。这些解析器允许索引和搜索已作为嵌套文档索引的关系内容。
以下查询解析器的示例用法假设已索引了以下文档:
12345678910111213141516171819202122<add> <doc> <field name="id">1</field> <field name="content_type">parent</field> <field name="title">Solr has block join support</field> <doc> <field name="id">2&...
Solr查询:分析组件
Solr查询:分析组件分析组件允许用户在结果集上计算复杂的统计聚合。
警告: 分析组件已被弃用。我们建议查看JSON分面API中的类似功能。如果JSON分面目前还没有涵盖您需要的功能,请通知项目组。
该组件使用户能够以各种方式与数据交互,通过多样化的分析函数集合以及强大的分面功能。标准分面在分析组件中得到支持,并增加了利用其分析能力的功能。
模块这通过需要在使用前启用的analytics Solr模块提供。
分析配置由于分析框架是一个_搜索组件_,它必须声明为搜索组件并添加到搜索处理程序中。
对于在云集合上的分布式分析请求,该组件严格使用AnalyticsHandler进行分片间通信。用户不应使用Analytics Handler提交分析请求。
接下来您需要注册请求处理程序和搜索组件。将以下行添加到solrconfig.xml中,接近其他请求处理程序的定义:
123456789101...
Solr查询:分析减少函数
Solr查询:分析减少函数减少函数将源和/或未减少的映射函数的值为每个Solr文档减少为单个值。
警告: 分析组件已被弃用。我们建议查看JSON分面API中的类似功能。如果JSON分面目前还没有涵盖您需要的功能,请通知项目组。
下面是分析组件提供的所有减少函数列表。这些可以与映射函数结合使用以实现更复杂的功能。
计数减少计数表达式的现有值数量。对于单值表达式,这等价于docCount。如果未给出表达式,则返回匹配文档的数量。
count() => < _Single Long_ >
count(< T >) => < _Single Long_ >
文档计数表达式具有现有值的文档数量。对于单值表达式,这等价于count。如果未给出表达式,则返回匹配文档的数量。
doc_count() => ...
Solr查询:分析映射函数
Solr查询:分析映射函数映射函数为每个Solr文档或减少操作映射值。
警告: 分析组件已被弃用。我们建议查看JSON分面API中的类似功能。如果JSON分面目前还没有涵盖您需要的功能,请通知项目组。
下面是分析组件提供的所有映射函数列表。这些映射可以链接在一起以实现更复杂的功能。
数值函数取反对数值表达式的结果取反。
neg(<_Numeric_ T>) => <T>:
neg(10.53) => -10.53
neg([1, -4]) => [-1, 4]
绝对值返回数值表达式的绝对值。
abs(< _Numeric_ T >) => < T >:
abs(-10.53) => 10.53
abs([1, -4]) => [1, 4...
Solr查询:分析表达式源
Solr查询:分析表达式源表达式源是在分析表达式中进行聚合的数据来源。
警告: 分析组件已被弃用。我们建议查看JSON分面API中的类似功能。如果JSON分面目前还没有涵盖您需要的功能,请通知项目组。
这些源可以是使用docValues索引的Solr字段,或者是常量。
支持的字段类型支持以下Solr字段类型。这些类型的字段可以是多值的也可以是单值的。
在分析表达式中使用的所有字段必须启用docValues。
// 由于从7.0开始Trie字段已被弃用,我们应该考虑从此列表中移除Trie字段…
字符串:
StrField
布尔值:
BoolField
整数:
TrieIntField
IntPointField
长整数:
TrieLongField
LongPointField
浮点数:
TrieFloatField
FloatPointField...
Solr配置:索引位置格式详解
Solr存储索引的位置和方式是可配置的选项。
使用dataDir参数指定索引数据的位置默认情况下,Solr将其索引数据存储在核心实例目录(instanceDir)下名为/data的目录中。如果你想为存储索引数据指定不同的目录,可以在核心的core.properties文件中配置dataDir,或在solrconfig.xml文件中使用<dataDir>参数。你可以用绝对路径或相对于SolrCore的instanceDir的路径名来指定另一个目录。例如:
1<dataDir>/solr/data/${solr.core.name}</dataDir>
${solr.core.name}替换将导致当前核心的名称被替换,这使得每个核心的数据保存在单独的子目录中。
如果你使用用户管理的索引复制来复制Solr索引,那...
Solr配置:隐式请求处理器详解
Solr自带许多开箱即用的请求处理器,它们被称为隐式的,因为在你能够使用它们之前不需要在solrconfig.xml中配置它们。
这些处理器具有预定义的默认参数,称为参数集,如有必要可以修改。
可用的隐式端点
注意:下面列出的所有端点路径都应放在Solr的主机和端口(如果使用端口)之后以构造URL。
管理处理器这些处理器中的许多在整个Admin UI中使用,以显示有关Solr的信息。
文件:返回${solr.home}/conf/中文件的内容。此处理器必须在端点路径中包含集合名称。
API端点
类和Javadocs
参数集
solr/<collection>/admin/file
ShowFileRequestHandler
_ADMIN_FILE
健康检查:报告节点的健康状况(仅在SolrCloud模式下可用)
API端点
类...
Apache Solr 9.8.0 发布:跨数据中心与内存管理突破
Apache Solr 9.8.0 重大架构升级发布2025年1月26日,Apache Solr 项目发布了 9.8.0 版本,这是一个具有里程碑意义的重大更新。此版本最引人注目的特性是 Solr Cross-DC(跨数据中心)项目的正式毕业,标志着 Solr 在大规模分布式部署方面达到了新的高度。
原文动态翻译Apache Solr 9.8.0 现已可用。此版本的主要亮点包括:
Solr Cross-DC 项目正式毕业:跨数据中心复制功能从实验状态转为生产就绪
内存请求限制参数:新增内存使用控制机制,防止 OOM 问题
新增 knn_text_to_vector 查询解析器:支持文本到向量的 K 近邻搜索
集群属性 API 改进:提供更灵活的集群配置管理
SolrJ 性能增强:Java 客户端库的多项性能优化
嵌套文档分片分割支持:支持包含嵌套文档的分片操作
分布式完善分析1....
Apache Solr 安全漏洞通告:CVE-2024-52012 与 CVE-2025-24814
Apache Solr 重要安全漏洞通告2025年1月26日,Apache Solr 安全团队公开披露了两个重要安全漏洞:CVE-2024-52012 和 CVE-2025-24814。这两个漏洞涉及配置集上传和核心创建过程中的安全风险,需要用户立即关注并采取相应的安全措施。
原文动态翻译Apache Solr 项目披露了两个安全漏洞:
CVE-2024-52012:Windows 平台配置集上传漏洞
影响范围:Windows 操作系统上运行的 Solr 实例
风险等级:高风险
漏洞描述:在 Windows 平台上,攻击者可能通过恶意构造的配置集上传绕过安全检查
CVE-2025-24814:可信配置集核心创建安全问题
影响范围:使用”可信”配置集创建核心的场景
风险等级:中高风险
漏洞描述:在使用”可信”配置集创建核心时,可能使用到不受信任的文件
分布式安全风险分析1. CVE...
Solr配置:CoreAdmin API完整指南
Core Admin API主要在运行SolrCloud集群时由Collections API在底层使用。
SolrCloud用户通常不应直接使用CoreAdmin API,但该API可能对用户管理集群或单节点安装的核心维护操作有用。
Core Admin API由CoreAdminHandler实现,这是一个特殊用途的请求处理器,用于管理Solr核心。与其他请求处理器不同,CoreAdminHandler不附加到单个核心。相反,每个Solr节点中有一个CoreAdminHandler实例,管理该节点中运行的所有核心,并可在/solr/admin/cores路径访问。
CoreAdmin操作可以通过指定action请求参数的HTTP请求执行,并将其他特定于操作的参数作为附加参数提供。
所有操作名称都是大写的,并在下面的部分中深入定义。
本节中的所有示例都假设你正在运行”techpro...
Solr配置:核心发现机制
核心发现意味着创建核心就像在磁盘上放置一个core.properties文件一样简单。
core.properties文件在Solr中,术语核心用于指单个索引以及相关的事务日志和配置文件(包括solrconfig.xml和schema文件等)。如果需要,你的Solr安装可以有多个核心,这允许你在同一服务器中索引具有不同结构的数据,并保持对如何向不同受众呈现数据的控制。在SolrCloud模式下,你会更熟悉术语集合。在幕后,一个集合由一个或多个核心组成。
可以使用bin/solr脚本或作为SolrCloud集合创建的一部分使用API创建核心。核心特定的属性(如用于索引或配置文件的目录、核心名称和其他选项)在core.properties文件中定义。Solr会找到你的Solr安装的任何目录中的任何core.properties文件(或在定义solr_home的目录下的目录中),并将使用定...
Solr配置:solrconfig.xml配置详解
solrconfig.xml文件是影响Solr本身最多参数的配置文件。
在配置Solr时,你会经常使用solrconfig.xml,无论是直接使用还是通过Config API创建”配置覆盖”(configoverlay.json)来覆盖solrconfig.xml中的值。
在solrconfig.xml中,你可以配置重要功能,例如:
请求处理器,处理对Solr的请求,例如添加文档到索引的请求或返回查询结果的请求
监听器,”监听”特定查询相关事件的进程;监听器可用于触发执行特殊代码,例如调用一些常见查询来预热缓存
用于管理HTTP通信的请求调度器
Admin Web界面
在非SolrCloud模式下运行时与复制和重复相关的参数
solrconfig.xml文件位于每个集合的conf/目录中。在server/solr/configsets/目录中可以找到几个经过充分注释的示...
Solr索引:复制字段
你可能希望以多种方式解释某些文档字段。Solr有一个制作字段副本的机制,这样你可以将几种不同的字段类型应用于单个传入信息片段。
你想要复制的字段名称是源,副本的名称是目标。在schema文件中,制作字段副本非常简单:
1<copyField source="cat" dest="text" maxChars="30000" />
在这个例子中,我们希望Solr将cat字段复制到名为text的字段。字段在分析之前被复制,这意味着你可以有两个具有相同原始内容的字段,但使用不同的分析链,并以不同方式存储在索引中。
在上面的例子中,如果text目标字段在输入文档中有自己的数据,cat字段的内容将作为附加值添加 - 就像所有值最初都是由客户端指定的一样。如果字段最终会获得多个值(无论是从多值源还是从多个copyField...
Solr索引:内容流
内容流是与Solr请求一起传递的批量数据。
当使用基于路径的URL访问Solr RequestHandlers时,包含请求参数的SolrQueryRequest对象还可能包含为请求提供批量数据的ContentStreams列表。(SolrQueryRequest这个名字有点误导性:它参与所有请求,无论是查询请求还是更新请求。)
内容流来源目前请求处理器可以通过多种方式获取内容流:
对于多部分文件上传,每个文件作为流传递。
对于内容类型不是application/x-www-form-urlencoded的POST请求,原始POST正文作为流传递。完整的POST正文被解析为参数并包含在Solr参数中。
参数stream.body的内容作为流传递。需要SOLR_ENABLE_STREAM_BODY=true。
每个stream.url和stream.file参数都被解析/获取...
Solr索引:字符过滤器
CharFilter是预处理输入字符的组件。
CharFilters可以像Token Filters一样链接起来,并放置在分词器前面。CharFilters可以添加、更改或移除字符,同时保留原始字符偏移量以支持高亮显示等功能。
solr.MappingCharFilterFactory此过滤器创建org.apache.lucene.analysis.MappingCharFilter,可用于将一个字符串更改为另一个(例如,将é标准化为e)。
此过滤器需要指定一个mapping参数,这是包含要执行映射的文件的路径和名称。
示例:
使用名称:
12345<analyzer> <charFilter name="mapping" mapping="mapping-FoldToASCII.txt"/> <tokeniz...
Solr索引:分析器
分析器检查字段的文本并生成token流。
分析器在Solr的schema中被指定为<fieldType>元素的子元素。
在正常使用中,只有solr.TextField或solr.SortableTextField类型的字段才会指定分析器。配置分析器的最简单方法是使用单个<analyzer>元素,其class属性是完全限定的Java类名。命名的类必须派生自org.apache.lucene.analysis.Analyzer。例如:
123<fieldType name="nametext" class="solr.TextField"> <analyzer class="org.apache.lucene.analysis.core.WhitespaceAnalyzer"/>...
Solr索引:分析界面
一旦你在Schema中定义了字段类型,并指定了你想要应用的分析步骤,你应该测试它以确保它按照你的期望运行。
幸运的是,Solr Admin UI中有一个非常方便的页面可以让你做到这一点。你可以调用任何文本字段的分析器,提供示例输入,并显示生成的token流。
例如,让我们看一些在bin/solr start -e techproducts示例配置中可用的”Text”字段类型,并使用分析界面(http://localhost:8983/solr/#/techproducts/analysis)来比较在索引时为句子”Running an Analyzer”生成的token如何与稍微不同的查询文本”run my analyzer”匹配。
我们可以从text_ws开始 - 这是可用的最简化的Text字段类型之一:
这显示了分析的每个步骤产生的token的简单输出(在这种情况下是单个步骤)。...