Solr搜索器的特性及相关操作
一.搜索处理器简介
所有的请求处理器都实现一个Java类,本例实现了solr.SearchHandler。在运行时,solr.SearchHandler被解析为内置的Solr类org.apache.solr.handler.component.SearchHandler。一般来说,只要在solrconfig.xml文件中看到一个前缀为solr.的类,一般都是Solr的核心Java包之一。在配置文件中利用solr.前缀简写Solr类的名称,运行时再解析至相应的内置Solr类,这种方式让配置文件看起来更加简介有序。

搜索处理器执行过程:

这种设计方式使得应用程序很容易根据实际情况调整Solr的查询处理过程。通常情况下,一个搜索处理器由以下组件组成,其中每个组件都定义在solrconfig.xml文件中。
1.请求参数修饰组件
a.默认值修饰【defaults】:为客户端未指定的值的参数添加默认值
b.常量修饰【invariants】:将客户端的参数值覆写为固定值
c.后缀修饰【appends】:在客户端请求的末尾添加额外参数
2.预处理组件【first-components】:一组优先执行的可选搜索组件,执行预处理任务
3.主搜索组件【components】:一组链式组合的搜索组件,至少包含查询组件
4.后处理组件【last-components】:一组可选的链式组合的搜索组件,执行后处理任务
一般而言,一个请求处理器并不需要定义上述所有组件,比如/select请求处理器仅仅定义了默认值修饰组件。这意味着所有的其他组件均是默认为solr.SearchHandler实现。
二.新建搜索器
Solr的所有查询语句都由一个叫搜索器的组件处理。在Solr中,任何时候都只能存在一个“处于活动状态”的搜索器。所有的搜索请求处理器中的查询组件都向这个处于活动状态的搜索器发起查询请求。
处于活跃状态的搜索器拥有底层Lucene索引快照的只读视图。这意味着,如果将一个新的文档添加到Solr中,它在当前搜索器的搜索结果中是不可见的。如果要搜索到,必须先关闭当前的搜索器,打开一个新的搜索器,这个新的搜索器添加了索引更新以后的只读视图。
在solr web界面查看活跃的搜索器:

每一个commit提交操作都会创建一个新的搜索器,以确保更新后的文档和索引可以被搜索器检索到。首先,旧的搜索器必须被销毁,但旧的搜索器上面可能存在大量查询请求,所以,Solr要等到所有正在进行的搜索都被旧搜索器处理完之后才会执行销毁操作。
同时,所有基于旧搜索器中索引视图的缓存对象都将会失效,新的缓存对象需要重新计算,所以基于索引提交开启一个新的搜索器是一个非常耗费资源的操作,在这个过程中可能造成搜索延迟。所幸,Solr有许多工具可以帮助解决这个问题。最重要的是,Solr支持预热理念,即在后台预热新搜索器,同时保证当前搜索器的活跃状态,直到新搜索器预热完毕。
三.预热新搜索器
Solr秉承一种理念,即允许应用在短时间内提供过期数据,但不允许应用的查询性能有大幅下降。这就是说,在新搜索器预热完成,并准备好处理查询请求前,Solr不会关闭当前活跃的搜索器。
一般而言,Solr有两种预热机制:一种是利用旧缓存自动预热新缓存,另一种是执行缓存预热查询。缓存预热查询就是向搜索器提交一段预先在solrconfig.xml文件中配置好的查询语句,目的是让新搜索器将需要缓存的查询结果载入到缓存中。

注意:一旦Solr中有commit等newSearcher事件发生,这些查询语句就会被执行。只有识别出能够提高查询性能的查询语句时,搜索器的预热才能真正地发挥作用。一般而言,预热查询语句应当包含应用程序中使用最频繁的查询请求参数【q、fq、sort等】。Solr并不一定要有预热查询语句,如果在提交操作之后查询性能出现明显下降,才有必要考虑使用预热查询语句。而且,预热查询语句不易过多,只包含最重要的查询语句即可。
四.第一个搜索器
在Solr初始化过程中或重新加载完一个内核之后,预热第一个搜索器。是否为第一个搜索器配置预热查询语句,这完全由开发者自己决定。大多数的Solr开发者使用完全相同的查询语句来预热新搜索器和第一个搜索器。
与搜索器相关的配置元素:
1.useColdSearcher
适用于一个搜索请求已经提交,而目前Solr中没有定义搜索器的情况。如果它的值为false,那么Solr将会一直处于阻塞状态,直到正在预热的搜索器完成所有预测查询,否则会立即使一个正在预热的搜索器进入活跃状态,而不管搜索器的预热程度如何。
2.maxWarningSearchers
当一个搜索器预热之前又接到提交请求,这意味着在当前搜索器预热完成之前,另一个搜索器的预热又开始了。如果预热时间过长,那么上述情况就会频繁发生。该参数就是控制后台并发预热的搜索器最大数目。一旦达到阈值,新的提交请求将会失败。这是一种很好的保障机制,因为后台并发预热的搜索器过多时会快速耗尽服务器的内存和CPU资源,该参数默认为2。如果发现服务器经常达到阈值,那就需要重新思考预热机制的设计逻辑,看看新搜索器的预热时间是否过长。
Solr搜索器的特性及相关操作的更多相关文章
- Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)
一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...
- Solr搜索技术
Solr搜索技术 今日大纲 回顾上一天的内容: 倒排索引 lucene和solr的关系 lucene api的使用 CRUD 文档.字段.目录对象(类).索引写入器类.索引写入器配置类.IK分词器 查 ...
- 关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造)
关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造) 摘要:在中文搜索中的标点.符号往往也是有语义的,比如我们要搜索“C++”或是“C#”,我们不希望搜索出来的全是“C”吧?那样对程 ...
- 什么是Solr搜索
什么是Solr搜索 一.Solr综述 什么是Solr搜索 我们经常会用到搜索功能,所以也比较熟悉,这里就简单的介绍一下搜索的原理. 当然只是介绍solr的原理,并不是搜索引擎的原理,那会更复杂. ...
- solr第一天 基础增删改查操作
全文检索技术 Lucene&Solr Part2 1 课程计划 1.索引库的维护 a) 添加文档 b) 删除文档 c) 修改文档 2.Lucene的查询 a) ...
- 数据结构Java实现04---树及其相关操作
首先什么是树结构? 树是一种描述非线性层次关系的数据结构,树是n个数据结点的集合,这些集结点包含一个根节点,根节点下有着互相不交叉的子集合,这些子集合便是根节点的子树. 树的特点 在一个树结构中,有且 ...
- 超级文件搜索器(SuperSearch)
写了个工具,各个分享渠道上传太难了,在这里分享给大家吧! 中文名称:超级文件搜索器 英文名称: SuperSearch 适用对象:硬盘里文件达到数万至数千万级的用户 运行环境:WindowXP,Wi ...
- WEBUS2.0 In Action - [源代码] - C#代码搜索器
最近由于工作的需要, 要分析大量C#代码, 在数万个cs文件中搜索特定关键词. 这是一项非常耗时的工作, 用Notepad++要运行接近半个小时. 于是我利用WEBUS2.0 SDK创建了一个代码搜索 ...
- C#代码搜索器
WEBUS2.0 In Action - [源代码] - C#代码搜索器 最近由于工作的需要, 要分析大量C#代码, 在数万个cs文件中搜索特定关键词. 这是一项非常耗时的工作, 用Notepad++ ...
随机推荐
- RST复位报文
复位报文段: 一些特殊情况,TCP一端向另一端发送复位报文,以通知对方关闭链接或者重新建立链接. 产生复位报文的三种情况: 1. 当客户端访问一个不存在的端口时,目标主机会给客户端发送一个复位报文段. ...
- opencv旋转图像
#include <opencv2\opencv.hpp> /* @param o The customer origin @param x The customer x @Note Th ...
- JDOJ3008 圆盘染色
JDOJ3008 圆盘染色 https://neooj.com/oldoj/problem.php?id=3008 题目描述 将一个圆盘分为N (1 <= N <= 105)个扇形,每个扇 ...
- leetcode189. 旋转数组
方法 4:使用反转算法 这个方法基于这个事实:当我们旋转数组 k 次, k\%nk%n 个尾部元素会被移动到头部,剩下的元素会被向后移动. 在这个方法中,我们首先将所有元素反转.然后反转前 k 个元素 ...
- requests获取图片的宽和高
try: if cover: resp = requests.get('%s?x-oss-process=image/info' % (url), timeout=30) if resp.status ...
- ASP.NET Core 中的 依赖注入介绍
ASP.NET Core 依赖注入 HomeController public class HomeController : Controller { private IStudentReposito ...
- cf1208G Polygons 欧拉函数
链接 cf 给你两个正整数\(n\)和\(k\),询问在一个圆上你最少需要几个点构才能造出\(k\)个边数小于等于\(n\)的正多边形 思路 深受迫害,所以写的详细一点,不会请留言. 性质1 考虑加进 ...
- nowcoder911J 异或的路径
题目链接 题意 给出一棵树,每条边有边权.求\(\sum\limits_{i=1}^n{f(i,j)}\),\(f(i,j)\)表示从i到j路径的异或和. 思路 \(g_i\)表示从根到\(i\)的异 ...
- Metasploit 常用命令手册
Installation curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/template ...
- [BZOJ1852] [MexicoOI06]最长不下降序列
[BZOJ1852] [MexicoOI06]最长不下降序列 额我也不知道是不是水过去的...和网上的另一篇题解对拍过了,但是拍不出来... 经过和神仙的讨论基本可以确定是对的了 考虑如下贪心 (我将 ...