solr java 全量,Solr实时创建增量或全量索引

1,为了支持增量建索引,我们需要把上述文中的mysql-data-config.xml内容改为

query="SELECT id, title, content FROM article"

deltaImportQuery="SELECT id, title, content FROM article

WHERE id='${dataimporter.delta.id}'"

deltaQuery="SELECT id FROM article

WHERE update_time > '${dataimporter.last_index_time}'">

2,我们在上述文中最后Execute时,使用firebug或其他调试插件拿到真实请求的地址(去掉了一些无用参数):

增量建索引链接

http://localhost:8983/solr/collection1/dataimport?command=delta-import&clean=false&commit=true&entity=article&optimize=false

全量建索引链接

http://localhost:8983/solr/collection1/dataimport?command=full-import&clean=true&commit=true&optimize=true

3,有了地址不难总结出solrj调用方法:

import org.apache.log4j.Logger;

import org.apache.solr.client.solrj.SolrQuery;

import org.apache.solr.client.solrj.SolrServerException;

import org.apache.solr.client.solrj.impl.HttpSolrServer;

import base.util.ConfigUtil;

public class SolrService {

private static Logger log = Logger.getLogger(SolrService.class);

private static HttpSolrServer solrServer;

static {

solrServer = new HttpSolrServer(ConfigUtil.getValue("solr.url"));

solrServer.setConnectionTimeout(5000);

}

/**

* 增量/全量建立索引 。

*

* @param delta ture,增量建立索引;false,重建所有索引

*/

public static void buildIndex(boolean delta) {

SolrQuery query = new SolrQuery();

// 指定RequestHandler,默认使用/select

query.setRequestHandler("/dataimport");

String command = delta ? "delta-import" : "full-import";

String clean = delta ? "false" : "true";

String optimize = delta ? "false" : "true";

query.setParam("command", command)

.setParam("clean", clean)

.setParam("commit", "true")

.setParam("entity", "article")

.setParam("optimize", optimize);

try {

solrServer.query(query);

} catch (SolrServerException e) {

log.error("建立索引时遇到错误,delta:" + delta, e);

}

}

}

4,然后在你需要的位置,如文章发布、修改后删除等候调用即可。

其实这个方法不用SolrJ的对像,用httpclient甚至java.net.URL都可以,只要能访问url就行。

相关说明:

主要原理:是利用率每次我们进行import的时候在solr.home的conf下面生成的dataimport.properties文件,此文件里面有最近一次导入的相关信息,如:

我的文件位置为

/root/solr-4.5.1/example/solr/collection1/conf

我的文件内容为

#Mon Dec 09 14:06:03 CST 2013

last_index_time=2013-12-09 14\:06\:00

article.last_index_time=2013-12-09 14\:06\:00

last_index_time是最近一次增量或全量索引的时间,通过比较这个时间和我们数据库表中的update_time列即可得出哪些是之后修改或者添加的。

data-config.xml说明:

query是获取全部数据的SQL

deltaImportQuery是获取增量数据时使用的SQL

deltaQuery是获取主键的SQL

参数说明:

clean:设置建索引前是否删除之前的索引;

commit:设置建索引后是否自动提交;

entity:mysql-data-config.xml entity name中配置的名称,如果配有多个,且这里不指定,所有entity都会被执行;

optimize:设置建索引后是否自动优化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值