您的位置:首页 > 其它

搜索引擎之阿堂Solr学习笔记系列6(进阶篇:更新索引查询策略)

2016-12-22 16:56 513 查看
在上篇文章中,阿堂主要和大家分享了关于solr的一个非常重要的文件schema.xml中一些字段和属性的介绍,相当于是对阿堂实战demo的一些基础知识的补充。

    本篇文章阿堂是介绍的另一个内容。它的具体场景是这样的:比如说,当我们用作索引、分词、查询的数据库表的字段内容有更新,或者新增记录时,solr对应的索引文件是不会自动更新的,因为solr根本不知道我们已经将用用索引的数据库内容进行了更新操作,所以需要我们来告诉solr我们的更新变动。这里我们需要使用如下url访问来自动激活solr的索引文件的更新。

     主要是使用的 http://IP:port/solr/dataimport?command=delta-import 这个url访问,当然在实际项目中需要我们采用一定的策略来处理。比如说使用定时器程序每隔几分钟来进行访问,具体隔多少分钟比较合适要看实际业务的情况,比如说电商平台的查询,我们可能会设置的更新频率要比较短一点,其它一些查询不频繁的平台,我们可以设置更新的频率时间要长一点。当然,如果设置的更新频率短的话,这对sorl服务器的性能也会提出不小的挑战,需要我们考虑对solr作分布式集群,一般是用solrCloud+zookeeper来架构,这个阿堂会在最后的高级篇文章再来分享,这里暂时只提一下。






















阿堂使用的测试代码如下

public class SolrjUpdate {

   

    publicstatic void main(String[] args) {

      

      

       Stringperson ="http://localhost:9999/solr/dataimport?command=delta-import&clean=true&commit=true";

      //构造HttpClient的实例

       HttpClienthttpClient = new HttpClient();

       //创建GET方法的实例  

       GetMethodgetMethod = new GetMethod(person);

      //使用系统提供的默认的恢复策略   

      getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,newDefaultHttpMethodRetryHandler());

       try {

         

         //执行getMethod   

          intstatusCode = httpClient.executeMethod(getMethod);

         System.out.println("HttpStatus.SC_OK = "+HttpStatus.SC_OK);

          if(statusCode != HttpStatus.SC_OK) {

               

               System.err.println("Method failed: "+getMethod.getStatusLine());

               

          }

         

          //读取内容  

          byte[]responseBody = getMethod.getResponseBody();

          //处理内容  

         System.out.println("返回内容 = "+new String(responseBody));

      

       } catch(HttpException e) {

         

      //发生致命的异常,可能是协议不对或者返回的内容有问题   

      System.out.println("Please check your provided httpaddress!");

      e.printStackTrace();

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: