在上篇文章中,阿堂主要和大家分享了关于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!");