zoukankan      html  css  js  c++  java
  • solr 自定义 RequestHandler

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

  • 相关阅读:
    No module named 'pydispatch'
    python 安装 vrml
    python3.7 安装pyopengl,环境搭建
    机智人 激光雷达 配置
    ubuntu server 16.04(amd 64) 配置网桥,多网卡使用激活
    ubuntu server 多网卡
    ubuntu16.04中开启和关闭防火墙
    c++ 判断给定区间是否是一个heap. O(N) (is_heap)
    c++ 判断容器A是否是容器B的子集,如果是,返回true(includes)
    c++ 容器元素填充指定数量的元素(generate_n)
  • 原文地址:https://www.cnblogs.com/lzj123/p/10594689.html
Copyright © 2011-2022 走看看