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:設置建索引后是否自動優化。
總結
以上是生活随笔為你收集整理的solr java 全量,Solr实时创建增量或全量索引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java睡眠排序算法怎么实现
- 下一篇: php 文件写入磁盘错误,Linux磁盘