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:Solrsolr-7.7.1serversolr-webappwebappWEB-INFlib;当然也可以修改 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 -> 测试↓