一.搜索处理器简介

  所有的请求处理器都实现一个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搜索器的特性及相关操作的更多相关文章

  1. Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)

    一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...

  2. Solr搜索技术

    Solr搜索技术 今日大纲 回顾上一天的内容: 倒排索引 lucene和solr的关系 lucene api的使用 CRUD 文档.字段.目录对象(类).索引写入器类.索引写入器配置类.IK分词器 查 ...

  3. 关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造)

    关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造) 摘要:在中文搜索中的标点.符号往往也是有语义的,比如我们要搜索“C++”或是“C#”,我们不希望搜索出来的全是“C”吧?那样对程 ...

  4. 什么是Solr搜索

    什么是Solr搜索 一.Solr综述   什么是Solr搜索 我们经常会用到搜索功能,所以也比较熟悉,这里就简单的介绍一下搜索的原理. 当然只是介绍solr的原理,并不是搜索引擎的原理,那会更复杂. ...

  5. solr第一天 基础增删改查操作

    全文检索技术   Lucene&Solr               Part2 1 课程计划 1.索引库的维护 a) 添加文档 b) 删除文档 c) 修改文档 2.Lucene的查询 a)  ...

  6. 数据结构Java实现04---树及其相关操作

    首先什么是树结构? 树是一种描述非线性层次关系的数据结构,树是n个数据结点的集合,这些集结点包含一个根节点,根节点下有着互相不交叉的子集合,这些子集合便是根节点的子树. 树的特点 在一个树结构中,有且 ...

  7. 超级文件搜索器(SuperSearch)

    写了个工具,各个分享渠道上传太难了,在这里分享给大家吧! 中文名称:超级文件搜索器 英文名称:  SuperSearch 适用对象:硬盘里文件达到数万至数千万级的用户 运行环境:WindowXP,Wi ...

  8. WEBUS2.0 In Action - [源代码] - C#代码搜索器

    最近由于工作的需要, 要分析大量C#代码, 在数万个cs文件中搜索特定关键词. 这是一项非常耗时的工作, 用Notepad++要运行接近半个小时. 于是我利用WEBUS2.0 SDK创建了一个代码搜索 ...

  9. C#代码搜索器

    WEBUS2.0 In Action - [源代码] - C#代码搜索器 最近由于工作的需要, 要分析大量C#代码, 在数万个cs文件中搜索特定关键词. 这是一项非常耗时的工作, 用Notepad++ ...

随机推荐

  1. SLAM:暑期学校

    专门开个(大)坑: RGB-D SLAM:姜翰青,商汤 视觉SLAM:章国锋,浙大CAD&CG国家重点实验室

  2. zz致力于变革未来的智能技术

    有 R-CNN SPPNet Fast R-CNN Faster R-CNN ... 的论文翻译 现在已经不能访问了...     [私人整理]空间金字塔池化网络SPPNet详解 SPP-Net是出自 ...

  3. oracle--状态查询

  4. java web开发需要注意的地方

    java需要注意的 1.字符串值相等比较 c#用双等号(==)来进行 字符串值相等比较.如下: string a="3"; string b="3"; if(a ...

  5. 重启服务器后Docker容器暴露的端口外网突然访问不了!!

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  6. Visual Studio 调试系列11 远程调试

    系列目录     [已更新最新开发文章,点击查看详细] 你可以调试已部署在另一台计算机的 Visual Studio 应用程序. 要进行此操作,可使用 Visual Studio 远程调试器. 01 ...

  7. SpringBoot 分环境变量配置

    方式一:通过不同环境的配置文件 1.1 springboot目录下配置不同环境的配置文件 1.2 在application.properties中配置环境 1.3运行springboot的run方法就 ...

  8. linux开启tcp_timestamps和tcp_tw_recycle引发的问题研究

    环境:centos7.4 内核版本3.10 最近看内核参数tcp_tw_recycle(该参数在内核 4.12 之后被移除),它用于快速回收处理TIME_WAIT状态的socket.搜索该参数相关的资 ...

  9. Tomcat基础操作

    1.在WebApps ROOT目录里,如果删除过ROOT从新创建,放置index.html,index.jsp即可访问. 2.修改默认8080端口,打开server.xml,将8080端口修改为80即 ...

  10. Mysql 错误 ERROR 1 (HY000) at line 1: Can't create/write to file '/home/kaizenly/cfg_dict.csv' (Errcode: 13 - Permission denied)

    [1]问题描述 (1)执行SQL语句: use billing; select * from cfg_dict into outfile '/home/kaizenly/cfg_dict.csv' f ...