首页 > 代码库 > 4.跟我学solr---SolrRequestHandler详解

4.跟我学solr---SolrRequestHandler详解

概述

我们在使用solr admin在做查询的时候,可以看到Request-Hander(qt)输入栏中有“/select”这样一个uri,当我们点击查询的时候所发起的请求是这样的,http://localhost:8080/solr/collection1/select?q=feature&wt=json&indent=true&_=1399167234058,我们可以看到"/select"被自动地加到请求的url里面。那么solr服务在接受到这个请求的时候,就会根据"/select"这段uri来选择对应的RequestHandler。


那“/select”这个RequestHandler到底配置在哪里呢?我们打开我们之前所配置的SOLR_HOME目录,在SORL_HOME\collection1\conf\目录下的solrconfig.xml文件中,我们找到如下配置,这个就是“/select”所对对应的RequestHandler了。

   <requestHandler name="/select" class="solr.SearchHandler">
    <!-- default values for query parameters can be specified, these
         will be overridden by parameters in the request
      -->
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <int name="rows">10</int>
       <str name="df">text</str>
     </lst>
  </requestHandler>

Configuration

多个handlers (包括是相同的类的实例,却拥有不同的配置) 能够在solrconfig.xml 中配置。

  <requestHandler name="/foo" default="true" class="my.package.CustomRequestHandler" />
  <requestHandler name="/bar" class="my.package.AnotherCustomRequestHandler" />
    <!-- initialization args may optionally be defined here -->
     <lst name="defaults">
       <int name="rows">10</int>
       <str name="fl">*</str>
       <str name="version">2.1</str>
     <lst>
  </requestHandler>

  <requestHandler name="/baz" class="my.package.AnotherCustomRequestHandler">
  <requestHandler name="/update/my-pdf-reader" class="my.package.MyPdfHandler">

Handler Resolution

客户端可以通过带有“gt”这个参数的“/select/ url”请求,也可以通过在solrconfig.xml配置的方式来决定要访问的SolrRequestHandler。对于上面的例子,假设它运行在localhost:8080/solr/上,你能够这样访问
  http://localhost:8080/solr/select/?qt=foo&...
  http://localhost:8080/solr/select/?qt=bar&...
  http://localhost:8080/solr/baz?...
  http://localhost:8080/solr/update/my-pdf-reader?...


Solr是通过下面的步骤去选择一个handler并处理请求的.....
寻找name属性跟请求中的qt参数匹配的handler
寻找在配置文件中“default=true”的handler
寻找在配置文件中name属性为“standad”的handler
使用StandardRequestHandler的默认实例


注意!如果你的配置文件solrconfig.xml 包含有name属性为"/select", "/update", 或"/admin",那么你的程序将不会沿用标准的请求处理过程,而将会是你自己自定义的逻辑。


扩展自己的Handler

实现一个SolrRequestHandler 最简单的方法是去扩展 RequestHandlerBase 类。也参考下面的几个Request Handlers。

solr自带的Handler

目前solr提供如下handler给大家使用,下面给出的solr官方文档中hander的文档,如果大家觉得有必要让笔者详细解析每个handler的用法,可以回复一下,笔者将会在接下来的章节中为大家讲解每个handler的具体用法。

Search handlers:

  • DisMaxRequestHandler

  • LukeRequestHandler

  • MoreLikeThisHandler

  • SearchHandler

  • SpellCheckerRequestHandler

Update handlers:

  • DataImportHandler

  • BinaryUpdateRequestHandler

  • CSVUpdateRequestHandler

  • ExtractingRequestHandler

  • JsonUpdateRequestHandler

  • XmlUpdateRequestHandler

  • XsltUpdateRequestHandler