Solr请求概念和配置详解

一.Solr请求概念

  Solr最常见的请求类型是在Solr索引中查找相关文档的查询【query】。除此之外,Solr还可以处理许多不同类型的请求。所有的请求基本上都是通过请求处理器提交给Solr。搜索处理器【search handler】是查询处理的默认请求处理器,通过调用一个或多个搜索组件,每个组件处理搜索请求的一部分,从而满足查询各个阶段的要求。例如,通过搜索组件执行主查询,其中分面、搜索结果高亮和拼写检查都有各自的搜索组件。要让查询请求能够使用主搜索组件,需要通过一个或多个查询解析器对查询文本进行解析,其作用是理解查询语法,将其映射为适当的查询对象集,以便在Solr索引中找到相关文档集。

二.请求处理器

  请求处理器【request handler】基本上是Solr所有请求的入口。它的作用是接受请求,执行某些功能,向客户端返回结果。Solr拥有许多请求处理器来完成完成各项任务。为简单起见,大多数请求处理器继承自RequestHandlerBase这个Java类,但这种做法并不是强制性的。SolrRequestHandler接口实现的任何类都可以作为一个请求处理器。虽然我们可以编写自己的请求处理器作为Solr的插件,实现SolrRequestHandler接口,但大多数Solr用户还是会使用Solr内置的请求处理器。如下图显示了大多数Solr内置请求处理器的继承关系:

  

  AnalysisRequestHandlerBase和ContentStreamHandlerBase是两个抽象类,所以不能直接引用。少数不是继承自RequestHandlerBase的内置请求器没有在这里列出。

  SearchHandler作为Solr最常见的请求处理器,它是搜索请求处理的默认请求处理器。下图对每个请求处理器的常见用法做了简单介绍:

  

  

  

  

  如下配置示例,启用了更新文档的UpdateRequestHandler,从一台服务器向另一台服务器复制文件的ReplicationHandler,以及几个用于搜索的SearchHandler实例:

  

  定义一个请求处理器时,需要指定两个属性:name和class。Solr维护了一个请求请求处理器查找列表,根据每个请求的指定要求,派发对应的请求处理器。class属性对应特定的Java类【SolrRequestHandler接口实现】,使用指定名称的请求处理器处理查询请求。

  如果请求处理器的名称以反斜杠/开头【标准做法】,name就使用该请求处理器的相对URL。

三.搜索组件

  SearchHandler是执行搜索的默认响应处理器,搜索默认会返回什么?是否只包含搜索结果?有没有匹配到的最相关类目,或是对匹配到的文档的部分文本进行高亮?如果只匹配到很少结果或没有结果,可供选择的拼写建议是否可以作为默认请求的一部分返回?

  从上面的介绍可知,许多搜索功能可以通过发送单独的、可用的请求来调用多个请求处理器来实现。理想情况下,向Solr发送一个情况,就能得到所有预期的结果。这正是搜索组件存在的原因。

  搜索组件是在搜索处理器生命周期内发生的可配置的处理步骤。搜索组件让搜索处理器将实现单个搜索请求的可重用的功能组合在一起。搜索组件在solrconfig.xml中进行配置。默认搜索组件如下:

  

  在第一个searchComponent标签中定义了两个属性,一个是name,另一个是class。name的值是query,class的值是solr.QueryComponent。该搜索组件只需定义一次,之后它可以被任意数量的请求处理器调用。在/select请求处理器中,会看到一个arr元素,其属性name为components。该元素包含了搜索处理器定义的搜索组件列表。components部分的每一行对应一个搜索组件名称,既可以是默认的搜索组件,也可以是solrconfig.xml中定义的其他搜索组件。

请求处理器和搜索组件的默认设置

请求处理器和搜索组件通常从以下两种来源接收请求设置:

  1. 在Solr的URL中传递代码以及查询字符串变量
  2. 在solrconfig.xml中配置一个请求处理器或搜索组件时,通过设置变量自动添加到每个请求,就像在Solr的URL中传递一样。配置如下:

  

  搜索组件添加了两个部分:invariants部分和defaults部分。如果Solr的请求URL里没有重写值,defaults部分就是默认值。如果想要执行安全默认设置,查询搜索组件的q=*:*确保不会发生意外或者避免没有结果返回的情况,这种情况下defaults默认值就是有用的。

  invariants部分与defaults部分类似,只不过Solr请求URL中常量参数无法被重写。关键词搜索的默认字段是df=content_field。

  大多数搜索组件支持在它们的XML配置中设置相应的属性。即使默认搜索组件没有在solrconfig.xml中明确定义,它们也是默认存在的。还可以通过添加first-components和last-components来插入搜索组件,这两部分表示分别在搜索处理器执行的组件列表的开始或结束处插入附加组件。

  在搜索处理器的所有搜索组件中,查询组件是最重要的。因为它负责查询的初始化执行和搜索结果的特定格式响应,而且随后的其他搜索组件需要在它的基础上执行。查询组件使用查询解析器对搜索处理器请求中的传入查询进行解析。Solr支持多种查询查询解析器。

四.查询解析器

  查询解析器将lucene查询解释成搜索语法,以便查找所需的文档集。Solr支持多种查询解析器,还支持用户编写自己的查询解析器。如搜索组件专门用于单个请求处理器,查询解析器也是专门用于单个搜索组件的。如下:

  

  Solr提供了许多查询解析器,每个查询解析器实现了一个QParserPlugin类。如果已有的查询解析器无法实现你需要的查询解析功能,可以自定义。Solr最常见的查询解析器是Lucene查询解析器【LuceneQParserPlugin】和eDisMax查询解析器【ExtendedDismaxQParserPlugin】。

原文地址:https://www.cnblogs.com/yszd/p/12248979.html

时间: 2024-10-10 07:12:33

Solr请求概念和配置详解的相关文章

JAVAEE——spring01:介绍、搭建、概念、配置详解、属性注入和应用到项目

一.spring介绍 1.三层架构中spring位置 2.spring一站式框架 正是因为spring框架性质是属于容器性质的. 容器中装什么对象就有什么功能.所以可以一站式. 不仅不排斥其他框架,还能帮其他框架管理对象. aop支持.ioc思想.spring jdbc.aop 事务.junit 测试支持 二.spring搭建 1.导包 日志包:com.springsource.org.apache.commons.logging-1.1.1.jar 可选:com.springsource.or

使用LVS实现负载均衡原理及安装配置详解

转:http://www.cnblogs.com/liwei0526vip/p/6370103.html 使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director

DNS基本概念及操作详解----------------转载

DNS基本概念及操作详解 目录: 1.DNS协议 2.DNS查询 2.1递归查询 2.2跌代查询 2.3反向查询 3.域维护 3.1全量AXFR传输 3.2增量IXFR传输 3.3通过NOTIFY 3.4动态更新 4.DNS安全 在很多人看来,DNS只是为外部提供DNS解析服务(我以前也是这么认为的,直到膝盖中了一箭),但作为互联网的基础设施,DNS远没有想象的那么简单.如果你没有听说过DNS查询.反向解析.zone传输.动态更新.DNS安全,那你可以从本文中得到关于他们的最简明的诠释. 一.

使用 LVS 实现负载均衡原理及安装配置详解

使用 LVS 实现负载均衡原理及安装配置详解 来源:肖邦linux 发布时间:2017-02-19 阅读次数:106 0 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用

马哥教育第十八天DNS、bind的基本配置详解

1.DNS: Domain Name Service DNS工作在53端口上,查询时使用udp协议,传送时使用tcp协议,全称域名:称为FQDN(Full Qualified Domain Name) 根域:root domain                        一级域:top-level domain                        二级域:公司.组织.个人使用                        主机: 递归:A --> B --> C -->

【转】Apache 的 httpd.conf 配置详解

Apache 的 httpd.conf 配置详解 原文链接 http://www.php100.com/html/webkaifa/apache/2009/0418/1192.html ServerRoot /usr/local ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerR oot定义的路径之下. ScoreBoardFile /var/run

Servlet配置详解

1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码. DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义). 所有部署描述符文件的顶层(根)元素为web-app.请注意,XML元素不像HTML,他们是大小写敏感的.因此,web-App和WEB-APP都

Tomcat基础配置详解

Tomcat基础配置详解 组件原理图如下: 任何tomcat实例就是一个server,而一个server内部要想能够解析jsp页面转义编译serlet程序,要靠其引擎来实现 而引擎才是真正意义上执行jsp代码的容器,都是tomcat用类来描述这些组件的 同时,为了接受用户的请求,需要基于connector组件,所谓监听的套接字的程序,能够接手用户的请求,被称为连接器 一个server内部可以完全运行N个引擎,无非就是运行多个虚拟机而已 war包的概念 放在网页目录可以直接访问,而部署的时候可以自

Web.xml配置详解(转)

Web.xml配置详解 Posted on 2010-09-02 14:09 chinaifne 阅读(295105) 评论(16) 编辑 收藏 1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码.DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义).