8.跟我学solr---UpdateRequestProcessor详解

简介

java web开发的同学应该很熟悉,在开发中经常会使用filter来处理请求中的一些切面需求。solr也提供类似的一种链式结构的handler来满足在添加数据索引请求的时候,通过切片的形式,增加一个handler来对请求进行加工。

配置在SORL_HOME\collection1\conf\solrconfig.xml文件中,配置方式如下:

 <updateRequestProcessorChain name="mychain" default="true">
   <processor class="solr.CustomUpdateRequestProcessorFactory" >
     <lst name="name">
       <str name="n1">x1</str>
       <str name="n2">x2</str>
     </lst>
   </processor>
   <processor class="solr.LogUpdateProcessorFactory" />
   <processor class="solr.RunUpdateProcessorFactory" />
 </updateRequestProcessorChain>

如果配置文件中没有指定一个"default",solr会默认选择LogUpdateProcessorFactory 和 RunUpdateProcessorFactory作为默认的handler。

如何选择所配置的UpdateChain

1.通过在url中传参数,例如http://localhost:8983/solr/update/xml?update.chain=mychain

2.在SolrRequestHandler配置中,指定对应的UpdateChain,在SORL_HOME\collection1\conf\solrconfig.xml文件中,配置如下:

 <!-- referencing it in an update handler -->
 <requestHandler name="/update/processortest" class="solr.JsonUpdateRequestHandler" >
   <lst name="defaults">
     <str name="update.chain">mychain</str>
   </lst>
 </requestHandler>

通过这个配置,当你发起一个/update/processortest请求的时候,就会选择JsonUpdateRequestHandler,然后该Handler会默认选择一个名为mychain的UpdateChain,如果不知道JsonUpdateRequestHandler是什么东西,可以参考之前的章节。http://blog.csdn.net/jaynol/article/details/24959373

一个简单的UpdateChain例子

例子的需求是,新增“cat”字段,只有当“popularity”的值大于5的时候才能新增。

代码如下:

package my.solr;

import java.io.IOException;

import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.solr.update.processor.UpdateRequestProcessorFactory;

public class ConditionalCopyProcessorFactory extends UpdateRequestProcessorFactory
{
  @Override
  public UpdateRequestProcessor getInstance(SolrQueryRequest req, SolrQueryResponse rsp, UpdateRequestProcessor next)
  {
    return new ConditionalCopyProcessor(next);
  }
}

class ConditionalCopyProcessor extends UpdateRequestProcessor
{
  public ConditionalCopyProcessor( UpdateRequestProcessor next) {
    super( next );
  }

  @Override
  public void processAdd(AddUpdateCommand cmd) throws IOException {
    SolrInputDocument doc = cmd.getSolrInputDocument();

    Object v = doc.getFieldValue( "popularity" );
    if( v != null ) {
      int pop = Integer.parseInt( v.toString() );
      if( pop > 5 ) {
        doc.addField( "cat", "popular" );
      }
    }

    // pass it up the chain
    super.processAdd(cmd);
  }
}

配置如下:

 <updateRequestProcessorChain name="mychain" default="true">
   <processor class="my.solr.ConditionalCopyProcessorFactory" />
   <processor class="solr.LogUpdateProcessorFactory" />
   <processor class="solr.RunUpdateProcessorFactory" />
 </updateRequestProcessorChain>

8.跟我学solr---UpdateRequestProcessor详解,布布扣,bubuko.com

时间: 2024-10-27 13:35:05

8.跟我学solr---UpdateRequestProcessor详解的相关文章

Solr查询详解

一. 查询参数说明 在做solr查询的时候,solr提供了很多参数来扩展它自身的强大功能!以下是使用频率最高的一些参数! 1.常用 q - 查询字符串,这个是必须的.如果查询所有*:* ,根据指定字段查询(Name:张三 AND Address:北京) fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=Name:张三&fq=CreateDate:[20081001 TO 20091031],找关键字mm,并且CreateDate是200810

Solr DocValues详解

前言: 在Lucene4.x之后,出现一个重大的特性,就是索引支持DocValues,这对于广大的solr和elasticsearch用户,无疑来说是一个福音,这玩意的出现通过牺牲一定的磁盘空间带来的好处主要有两个: (1)节省内存 (2)对排序,分组和一些聚合操作时能够大大提升性能 下面来详细介绍下DocValue的原理和使用场景 (一)什么是DocValues? DocValues其实是Lucene在构建索引时,会额外建立一个有序的基于document => field value的映射列表

Solr相关概念详解:SolrRequestHandler

转自:http://www.cnblogs.com/chenying99/archive/2012/07/24/2607339.html 1. standard (StandardRequestHandler) 标准查询分析器使用SolrQuerySyntax通过q参数来指定查询,它要求被很好的组织(Formed),或返回一个异常.对于精确查询和任意复杂的查询,使用Standard效果很好. 2. dismax ( DismaxRequestHandler ) dismax查询分析器是一个为用户

6.跟我学solr---请求参数详解

简介 前面我们在讲SolrRequestHandler和QueryResponseWriter的时候提到过两个参数'qt'和'wt",这两个参数是分别用于选择对应的SolrRequestHandler和QueryResponseWriter的.solr定义了很多类似的参数,它们都分别属于某个大类中,例如"qt"和"wt"就属于CoreQueryParameters.下面罗列一下solr的所有参数列表,来源于solr官网.下面笔者会一一给大家讲解这些参数的作

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服务在接

5.跟我学solr---QueryResponseWriter详解

简介 QueryResponseWriter是solr的一个插件,与上一章讲的SolrRequestHandler是配对的,用于定义solr查询结果的返回格式. 回到solr admin的查询页面,我们可以看到wt下拉框中的可选项包括,json,xml,csv等不同的返回格式,查询结果将会以所选择的返回格式返回.solr作为一个独立的web服务,在开发过程中都希望把它当作一个单独的专门提供搜索服务的平台,因此在与solr对接的时候,就会面临以什么格式交互的问题,幸运的是,solr已经提供了多种返

一步一步学ios UITextView(多行文本框)控件的用法详解(五5.8)

本文转载至 http://wuchaorang.2008.blog.163.com/blog/static/48891852201232014813990/ 1.创建并初始化 创建UITextView的文件,并在.h文件中写入如下代码: [csharp] view plaincopy #import <UIKit/UIKit.h> @interface TextViewController : UIViewController <UITextViewDelegate> { UITe

入木三分学网络第一篇--VRRP协议详解第一篇(转)

因为keepalived使用了VRRP协议,所有有必要熟悉一下. 虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是解决局域网中配置静态网关时,静态网关出现单点失效现象的路由协议. VRRP广泛应用在边缘网络中,它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器(位于一个虚拟路由器组中, 在该组中,只有一台路由器--master路由器工作,转发数据包,其它路由器是backup路由器,不参与转发数据包),以及在实

菜鸟学php扩展 之 自动生成的扩展框架详解(二)

前言 上一文:菜鸟学php扩展 之 hello world(一),不问所以然的,强行与php扩展say hello了.对于ext_skel自动生成的框架,将在本文进行详解,当作备忘录. 正文 ext_skel的用法 ./ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]] [--skel=dir] [--full-xml] [--no-help] --extname=module module is the