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 -> 测试↓