首页 > 技术文章 > solr 自定义 RequestHandler

lzj123 2019-03-25 16:47 原文

RequestHandler的作用:如果是业务查询之前相对查询条件处理,可以继承RequestHandlerBase ,如果想在提交时处理更新索引的业务可以继承比如修改索引字段值,这时可以继承UpdateRequestHandlers;如果想对查询结果返回前想处理业务,可以继承SearchComponent;这里只对前者做讲解↓

(1)新建一个项目:这里已springboot项目为例,引入以下solr包

<dependency>
   <groupId>org.apache.solr</groupId>
   <artifactId>solr-core</artifactId>
   <version>7.7.1</version>
</dependency>

(2)新建自定义 RequestHandler :

package com.liuzj.solr.handlers;

import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;

import java.util.HashMap;
import java.util.Map;

/**
 * 自定义 RequestHandler
 *
 * @author liuzj
 * @date 2019-03-25
 */
public class MyRequestHandlerSelect extends RequestHandlerBase {
    @Override
    public void handleRequestBody(SolrQueryRequest solrQueryRequest, SolrQueryResponse solrQueryResponse) throws Exception {
        // 获取查询参数(在 solr-console log中可以看到)
        System.out.println(solrQueryRequest.getParams().get("q"));
        // 设置返回体
        Map<String,Object> result = new HashMap<>();
        result.put("name","Tom");
        result.put("label","Jack");
        solrQueryResponse.addResponse(result);
    }

    @Override
    public String getDescription() {
        return null;
    }
}

(3)将项目打成jar包放置 solr -> webapp -> WEB-INF -> lib 目录下;eg:D:\Solr\solr-7.7.1\server\solr-webapp\webapp\WEB-INF\lib;当然也可以修改 solrconfig.xml 文件指定jar的具体位置,如下↓

 

(4)配置对应core的solrconfig.xml配置文件,添加自定义 RequestHandler配置:

<requestHandler name="/mySelect" class="com.liuzj.solr.handlers.MyRequestHandlerSelect">
    <lst name="defaults">
      <str name="echoParams">explicit</str>
      <str name="wt">json</str>
      <str name="indent">true</str>
      <int name="rows">10</int>  
      <str name="df">usergoods_mix</str>  
    </lst>
  </requestHandler>

(5)重启solr -> 测试↓

推荐阅读