`

solr中plugin的扩展

阅读更多

 

1.    将solr 源文件解压,并且使用开发工具,如:Eclipse 。新建工程,并将源文件以及相关的jar 导入。

2.    在org.apache.solr.handler 包下(一般在此包下进行扩展),新建java 类。

3.    新建的类需要继承RequestHandlerBase 类,并且实现其中的handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) 方法。同时需要覆盖 getVersion() 、 getDescription() 、 getSourceId() 、 getSource() 、 getDocs() 等方法 。

4.    handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) 方法中,req 表示传入的参数对象,rsp 表示经过处理后得到的需要显示的对象,

5.    业务处理根据个人的需要进行编写。

6.    在solr 中,常量一般在org.apache.solr.common.params 包下的接口CommonParams 中定义。在本项目中,需要在CommonParams 中添加新的常量,如:

public static final String URI = "uri";//URI 的值表示访问的参数。

7.    以上工作实现后,对solr 重新打包。然后加入到Web 项目目录\WEB-INF\lib 中。

8.    打开solr 文件夹(对应resin 文件夹下的solr 文件夹),打开conf 文件夹下的solrconfig.xml 文件,在<config> ……</config> 标签中,添加如下内容:

<requestHandler name="/urlinfo" class="solr.URItoWordsHandler">

</requestHandler>

其中name 属性决定了访问的路径,class 属性决定了处理类。

9.    打开IE 浏览器,输入“http://localhost:8081/index/urlinfo?url= ?wt= ?”,其中“localhost:8081/index/ ”表示该WEB 应用程序的访问地址,“urlinfo ”对应第8 条中的<requestHandler> 标签中的name 属性的值。url 对应传入的查询网页地址(对应第6 条中添加的常量的值(uri ))。wt 表示要输出的格式,值一般为:xml 和json ,表示输出的格式为xml 格式或者json 格式。

10. 以下通过一个例子具体说明:

    a. 在合适的包下编写所需要的java 类,本例中类名为 URItoWordsHandler ,该类继承 RequestHandlerBase 类。

/** 

  * 导入所需要的包 

  */ 

import java.net.MalformedURLException; 

import java.net.URL; 

import java.util.ArrayList; 

import java.util.List; 

  

import org.apache.solr.common.params.CommonParams; 

import org.apache.solr.common.params.SolrParams; 

import org.apache.solr.common.util.NamedList; 

import org.apache.solr.common.util.SimpleOrderedMap; 

import org.apache.solr.request.SolrQueryRequest; 

import org.apache.solr.request.SolrQueryResponse; 

  

/** 

public class URItoWordsHandler extends RequestHandlerBase { 

    public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) 

           throws Exception { 

       /** 

         * 获取传递的参数集合,并且进行相应的业务处理 

         */ 

       SolrParams params = req.getParams(); 

  

       /** 

         * 从参数集合中得到想要的参数 

         */ 

       String uri = params.get(CommonParams. URI ); 

       /** 

         * 以下进行合适的业务处理,具体处理过程省略 

         */ 

  

       ………… 

  

       /** 

         * 将业务处理结果添加到 rsp ,并且输出 

         */ 

       rsp.add( "result" , result); 

    } 

  

       ///////////// SolrInfoMBeans methods //////////////// 

        ///////////////// 以下覆写父类的方法 /////////////////// 

    @Override 

    public String getVersion() { 

       return "$Revision: 561904 $" ; 

    } 

  

    @Override 

    public String getDescription() { 

       return "Solr MoreLikeThis" ; 

    } 

  

    @Override 

    public String getSourceId() { 

       return "$Id: MoreLikeThisHandler.java 561904 2007-08-01 18:43:02Z ryan $" ; 

    } 

  

    @Override 

    public String getSource() { 

       return "$URL: http://svn.apache.org/repos/asf/lucene/solr/trunk/src/java/org/apache/solr/handler/MoreLikeThisHandler.java $" ; 

    } 

  

    @Override 

    public URL[] getDocs() { 

       try { 

           return new URL[] { new URL( 

                  "http://wiki.apache.org/solr/MoreLikeThis" ) }; 

       } catch (MalformedURLException ex) { 

           return null ; 

       } 

    } 

} 

     

    b. 在solrconfig.xml 中<config> 标签下添加相应的配置信息:

   <!--   zhouwendong 2009-1-7   START!!! 注释,便于后期修改  --> 

    <requestHandler name="/urlinfo" class="solr.URItoWordsHandler"> 

        <!--  /urlinfo 表示访问路径  class 表示对应的处理类  --> 

        <!--  以下为其他说明,可根据需要修改或删除  --> 

<lst name=" 其他说明"> 

            <int name=" 名称"> 参数</int> 

        </lst> 

</requestHandler> 

<!--   zhouwendong 2009-1-7   END!!!   --> 

 

   c. 启动服务器,在浏览器中输入地址http://localhost:8080查看结果。

0
0
分享到:
评论
2 楼 zhouwendong006 2009-03-27  
chenlb 写道

你完全可以写一个 Param 的子类, 而不是修改CommonParams,

受教!
1 楼 chenlb 2009-03-26  
你完全可以写一个 Param 的子类, 而不是修改CommonParams,

相关推荐

Global site tag (gtag.js) - Google Analytics