DisMax查询解析器旨在处理用户输入的简单短语(没有复杂语法),并使用基于每个字段重要性的不同权重(加权)在多个字段中搜索个别词条。附加选项使用户能够基于每个用例特定的规则(独立于用户输入)来影响评分。
总的来说,DisMax查询解析器的界面更像Google,而不是’lucene’ Solr查询解析器的界面。这种相似性使DisMax成为许多消费者应用程序的合适查询解析器。它接受简单的语法,并且很少产生错误消息。
DisMax查询解析器支持Lucene QueryParser语法的极其简化的子集。与Lucene一样,引号可用于分组短语,+/-可用于表示必需和可选子句。所有其他Lucene查询解析器特殊字符(除了AND和OR)都被转义以简化用户体验。DisMax查询解析器负责使用包含跨字段DisMax查询的布尔子句和用户指定的加权从用户输入构建良好的查询。它还允许Solr管理...
Solr查询:标准查询解析器详解
Solr的默认查询解析器也称为”lucene”解析器。
标准查询解析器的关键优势在于它支持强大且相当直观的语法,允许你创建各种结构化查询。最大的缺点是它对语法错误非常不宽容,与DisMax查询解析器相比,后者设计为尽可能少抛出错误。
标准查询解析器参数除了通用查询参数、分面参数、高亮参数和更多类似查询参数外,标准查询解析器还支持下表中描述的参数。
q定义使用标准查询语法的查询。此参数是必需的。
q.op指定查询表达式的默认运算符。可能的值是”AND”或”OR”。
df指定默认可搜索字段。
sow在空白处分割。如果设置为true,则为每个单独的空白分隔词单独调用文本分析。默认值是false;空白分隔的词序列将一次性提供给文本分析,使得在词序列上操作的分析过滤器能够正常运行,例如多词同义词和shingles。
默认参数值在solrconfig.xml中指定,或者在请求中通过查询时值覆盖。...
Solr查询:高亮显示功能详解
Solr中的高亮显示功能允许匹配用户查询的文档片段包含在查询响应中。
这些片段包含在查询响应的特殊部分(highlighting部分),客户端使用包含的格式化线索来决定如何向用户呈现片段。片段是包含查询匹配的文档字段的一部分,有时也称为”摘要”或”段落”。
高亮显示是高度可配置的,可能比Solr的任何其他部分都更加灵活。有许多参数分别用于片段大小、格式化、排序、备用/替代行为以及其他难以分类的选项。尽管如此,高亮显示使用起来非常简单。
使用方法高亮显示要求你在模式中定义一个uniqueKey。
通用高亮显示参数你需要设置hl参数,通常还需要hl.fl参数来启用返回高亮显示结果。下表记录了这些参数和其他一些支持的参数。注意许多高亮显示参数支持字段级覆盖,如:f._title_txt_.hl.snippets。
hl
必需性
默认值
可选
false
使用此参数启...
Solr查询:分面搜索功能详解
分面搜索(Faceting)是基于索引词对搜索结果进行分类整理的功能。
搜索者可以看到索引词和对应匹配文档的数量统计,分面搜索使用户可以轻松地探索搜索结果,精确定位到所需的结果。
另外,还可以参考JSON分面API了解另一种实现方法。
通用分面参数有两个控制分面功能的通用参数。
facet
必需性
默认值
必需
false
如果设为true,此参数会在查询响应中启用分面计数。如果设为false、空白或缺失,则禁用分面功能。除非此参数设为true,否则下面列出的其他参数都不会生效。
facet.query
必需性
默认值
可选
无
指定一个使用Lucene默认语法的任意查询来生成分面计数。
默认情况下,Solr的分面功能会自动确定字段的唯一词并返回每个词的计数。使用facet.query,你可以覆盖这个默认行为,精确选择要统计的词或表达式。在典型的分面实现中...
Solr索引:更新处理器与数据导入完整指南
Solr索引:更新处理器与数据导入完整指南更新处理器是专门设计用于向索引添加、删除和更新文档的请求处理器。除了导入丰富文档的插件外,Solr原生支持对XML、CSV和JSON结构化文档的索引。
更新处理器概述基本原理推荐的请求处理器配置和使用方式是使用基于路径的名称,这些名称映射到请求URL中的路径。也可以通过qt(查询类型)参数指定请求处理器。
统一更新请求处理器单个统一的更新请求处理器支持XML、CSV、JSON和javabin更新请求,根据内容流的Content-Type委托给适当的ContentStreamLoader。
文档预处理Solr为更新请求处理器提供了文档预处理插件,称为更新请求处理器,允许在文档被索引或甚至根据schema检查之前对其进行处理。
UpdateRequestHandler配置基本配置默认配置文件默认配置了更新请求处理器:
1<requestHa...
Solr索引:字段定义与属性配置详解
Solr索引:字段定义与属性配置详解字段在schema的fields元素中定义。一旦设置好字段类型,定义字段本身就是简单的事情。
字段定义示例基本字段定义以下示例定义了一个名为price的字段,类型为float,默认值为0.0;indexed和stored属性被显式设置为true,而在float字段类型上指定的任何其他属性都将被继承。
1<field name="price" type="float" default="0.0" indexed="true" stored="true"/>
复杂字段定义示例1234567891011121314<!-- 文本字段与多值支持 --><field name="content" type=&...
Solr索引:Token过滤器完整指南与高级应用
Solr索引:Token过滤器完整指南与高级应用过滤器检查token流,根据使用的过滤器类型保留、转换或丢弃它们。
关于过滤器基本原理与分词器一样,过滤器消费输入并生成token流。过滤器也源自org.apache.lucene.analysis.TokenStream,但与分词器不同,过滤器的输入是另一个TokenStream。
过滤器的工作通常比分词器更容易,因为在大多数情况下,过滤器按顺序查看流中的每个token,并决定是否传递、替换或丢弃它。
高级分析能力过滤器也可以通过向前查看以同时考虑多个token来做更复杂的分析,尽管这较为罕见。
例如,假设用于标准化会被分成两个单词的州名的过滤器:
单个token“california”将被替换为“CA”
token对“rhode”后跟“island”将成为单个token“RI”
过滤器链式处理因为过滤器消费一个TokenStre...
Solr索引:Schema元素结构与核心配置详解
Solr索引:Schema元素结构与核心配置详解Solr在schema文件中存储关于它期望理解的字段类型和字段的详细信息。
Solr的Schema文件Schema文件的名称和位置可能根据你最初配置Solr的方式或后来修改的情况而有所不同。
文件命名约定managed-schema.xml
Solr默认使用的schema文件名称
支持通过Schema API或无模式模式在运行时进行模式更改
你可以明确配置托管模式功能使用替代文件名,但文件内容仍由Solr自动更新
schema.xml
传统的schema文件名称
可由使用ClassicIndexSchemaFactory的用户手动编辑
SolrCloud环境
如果使用SolrCloud,可能无法在本地文件系统上找到这些名称的任何文件
只能通过Schema API(如果启用)或通过Solr管理界面的云屏幕查看schema
交互...
Solr索引:字符过滤器完整指南与实战应用
Solr索引:字符过滤器完整指南与实战应用字符过滤器(CharFilter)是对输入字符进行预处理的组件。
字符过滤器可以像Token过滤器一样链接,并放置在分词器前面。字符过滤器可以添加、更改或删除字符,同时保留原始字符偏移量,以支持高亮等功能。
solr.MappingCharFilterFactory基本功能此过滤器创建org.apache.lucene.analysis.MappingCharFilter,可用于将一个字符串更改为另一个字符串(例如,用于将é标准化为e)。
此过滤器需要指定一个mapping参数,这是包含要执行映射的文件的路径和名称。
配置示例使用符号名称配置12345<analyzer> <charFilter name="mapping" mapping="mapping-FoldToASCII.txt&q...
Solr索引:分词器完整指南与实例详解
Solr索引:分词器完整指南与实例详解分词器负责将字段数据分解为词汇单元或tokens。每个token(通常)是文本中字符的子序列。分析器知道它配置的字段,但分词器不知道。分词器从字符流(Reader)中读取并产生token对象序列(TokenStream)。
分词器基本概念工作原理
输入流中的字符如空格或其他分隔符可能被丢弃
它们也可能被添加或替换,如将别名或缩写映射到标准化形式
token包含除文本值外的各种元数据,如token在字段中出现的位置
重要注意事项由于分词器可能产生与输入文本不同的token,您不应假设:
token的文本与字段中出现的文本相同
token的长度与原始文本相同
多个token可能具有相同位置或引用原始文本中的相同偏移量
在使用token元数据进行搜索结果高亮等功能时要记住这一点。
分词器配置语法基本配置格式在schema的<fieldTyp...
Solr索引:动态字段机制与实际应用
Solr索引:动态字段机制与实际应用动态字段允许Solr索引你在schema中没有明确定义的字段。
这在你发现忘记定义一个或多个字段时非常有用。动态字段通过为可以添加到Solr的文档提供一些灵活性,可以让你的应用程序不那么脆弱。
动态字段的基本概念动态字段就像常规字段一样,只是它的名称中包含通配符。当你索引文档时,不匹配任何明确定义字段的字段可以与动态字段匹配。
基本示例假设你的schema包含一个名为*_i的动态字段:
1<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
如果你尝试索引一个包含cost_i字段的文档,但在schema中没有定义明确的cost_i字段,那么cost_i字段将使用为*_i定义的字...
Solr索引:分析器工作原理与配置详解
Solr索引:分析器工作原理与配置详解分析器检查字段文本并生成token流。分析器在Solr模式的<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...
Solr配置:模块系统详解与安装配置指南
Solr配置:模块系统详解与安装配置指南Solr模块是不属于solr-core但由Solr项目官方维护的附加Solr插件。它们提供明确定义的功能,例如”extracting”模块,允许用户使用Apache Tika索引富文本文档。单个模块可以包含多个插件。
⚠️ 历史说明:模块以前被称为”contribs”(贡献包)。
模块系统架构模块结构
每个模块在构建时产生一个单独的.jar文件
打包在模块的lib/目录中
模块所需的所有额外依赖项(且不由Solr核心提供)也打包在那里
这有助于保持Solr主核心的小而精简
发行版本差异Solr模块不包含在Solr二进制发行版的slim变体中。请下载/安装完整的Solr二进制发行版以便使用Solr模块。
安装模块方法一:系统属性或环境变量启用模块的最简单方法是列出你打算使用的模块:
使用系统属性12# 通过系统属性-Dsolr.mod...
Solr配置:脚本更新处理器详解与多语言脚本实例
Solr配置:脚本更新处理器详解与多语言脚本实例ScriptUpdateProcessorFactory允许在Solr文档更新处理期间使用Java脚本引擎,为在索引之前表达自定义文档处理逻辑提供了极大的灵活性。
它有提交、删除、回滚等索引操作的钩子,但add是最常见的用法。它被实现为一个UpdateProcessor,放置在UpdateChain中。
⚠️ 提示:这以前被称为_StatelessScriptingUpdateProcessor_,重命名是为了澄清此更新处理器的关键方面是它启用了脚本功能。
功能特性
多语言支持:脚本可以用JVM支持的任何脚本语言编写(如JavaScript)
动态执行:动态执行,无需预编译
强大工具:有时被称为”脱困免费卡”,因为你可以用这种方式解决一些无法以其他方式解决的问题
⚠️ 安全警告:能够在索引管道中运行你选择的脚本是一个非常强大的工具,但...
Solr配置:资源加载机制与管理详解
Solr配置:资源加载机制与管理详解Solr组件可以使用资源进行配置:存储在外部文件中的数据,可以以位置无关的方式引用。
资源的示例包括:模式组件需要的文件,例如,停用词过滤器的停用词列表;以及用于学习排序的机器学习模型。资源通常从configSet解析,但也有其他选择。
资源加载机制Solr的资源通常仅在Solr集合或Solr核心加载时初始加载。更新资源后,通常需要:
SolrCloud模式:重新加载受影响的集合
用户管理集群或单节点安装:重新加载核心
通用方法:重启所有受影响的Solr节点
⚠️ 注意:托管资源可以通过API操作,不需要显式重新加载。
配置集中的资源配置集是包含solrconfig.xml、模式和它们引用的资源的目录。
SolrCloud模式:存储在ZooKeeper中
用户管理集群和单节点安装:存储在文件系统上
任何模式:资源可以共享或专用于配置集
推荐...
Solr配置:包管理器内核机制与API详解
Solr配置:包管理器内核机制与API详解包管理器(CLI)内部使用各种Solr API来安装、部署和更新包。本文档提供了这些API的概述和详细使用指南。
核心特性零中断部署(热部署)
支持在不重启节点或重新加载核心的情况下安装和更新包
部署快速,无请求失败或缓存过期
实现真正的热部署能力
简化打包流程标准插件概念支持
查询解析器、搜索组件、请求处理器、URP等标准插件概念
无需特殊代码/打包更改即可支持
保持传统插件开发模式
向后兼容性
用户已部署的构件(包含自定义插件的jar)兼容
无需重新编译或重新打包
促进更广泛的采用
灵活的包格式
支持单jar包和多jar包
使用熟悉/标准的命名约定
采用行业标准的包管理器概念和术语(类似apt、dnf、homebrew等)
类加载器架构类加载器隔离是系统的核心。系统简化为两层类加载器:
根类加载器
包含Solr...
Solr配置:请求分发器配置与HTTP缓存控制详解
Solr配置:请求分发器配置与HTTP缓存控制详解solrconfig.xml中的requestDispatcher元素控制Solr HTTP RequestDispatcher实现响应请求的方式。
包含定义是否应处理/select URL(用于Solr 1.1兼容性)、是否支持远程流、文件上传的最大大小以及如何响应请求中的HTTP缓存头等参数。
handleSelect元素⚠️ 重要提醒:handleSelect用于传统向后兼容性;Solr新用户不需要更改默认配置方式。
第一个可配置项是<requestDispatcher>元素本身的handleSelect属性。此属性可以设置为两个值之一:”true”或”false”。它控制Solr如何响应诸如/select?qt=XXX的请求。
默认值”false”:如果没有明确注册名为/select的请求处理器,将忽略对/sel...
Solr配置:包管理器完整使用指南
Solr配置:包管理器完整使用指南Solr的包管理器允许在集群环境中安全地安装和更新Solr特定的包,实现无需重启节点的动态插件管理。本文将详细介绍包管理器的使用方法、安全注意事项和最佳实践。
包管理器概述什么是包在Solr的包管理系统中,包是包含一个或多个Solr插件的Java jar文件集合(通常是一个文件)。每个jar文件都附带一个签名字符串,可以根据提供的公钥进行验证。
核心设计理念包管理器的关键设计特点是能够在集群环境中安全地安装或更新包,而无需重启每个节点。系统的其他设计要素包括:
远程仓库安装:从远程仓库安装的能力
包标准化:统一的包格式和规范
命令行界面:完整的CLI支持
包存储:集中式包存储机制
启用包管理器启用命令包管理器默认是禁用的。要启用它,需要使用-Denable.packages=true参数启动所有Solr节点:
1bin/solr start -c...
Solr配置:插件系统架构与管理完整指南
Solr配置:插件系统架构与管理完整指南Solr的优势之一是提供了丰富的功能平台,同时支持添加自定义组件在Solr内运行。当实现是可配置的时,Solr将这些组件称为”插件”。
插件系统概述插件的普遍性在Solr配置中,你可能已经通过”class”引用看到了许多插件。常见示例包括:
请求处理器:处理搜索请求
搜索组件:执行具体搜索功能
查询解析器:解析查询语句
Token过滤器:处理文本分析
内置插件的丰富性大多数应用程序不需要创建插件,因为Solr提供了丰富的内置插件集。但如果需要自定义,建议先查看现有类似插件的代码作为起点。
插件开发资源编写自定义插件是一个高级主题,超出了参考指南的范围。一个有用的资源是Solr Wiki上的插件文档:https://cwiki.apache.org/confluence/display/solr/SolrPlugins
插件类型分类Solr中...
Solr配置:请求参数API与参数集管理详解
Solr配置:请求参数API与参数集管理详解请求参数API允许创建参数集(paramsets),这些参数集可以覆盖或替代在solrconfig.xml中定义的参数。
使用此API定义的参数集可以在对Solr的请求中使用,或者直接在solrconfig.xml请求处理器定义中引用。
API概述请求参数API实际上是Config API的另一个端点,而不是一个独立的API,具有特定的命令。它不会替换或修改solrconfig.xml的任何部分,而是提供了处理请求中使用的参数的另一种方法。
参数存储在名为params.json的文件中:
在SolrCloud中保存在ZooKeeper中
在用户管理的集群或单节点安装中保存在conf目录中
使用场景什么时候你可能想要使用这个功能?
避免频繁编辑:避免频繁编辑solrconfig.xml来更新经常变化的请求参数
参数复用:在各种请求处理器...