1,爲了支持增量建索引,咱們須要把上述文中的mysql-data-config.xml內容改成java
<dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/basic" user="root" password="123"/> <document> <entity name="article" transformer="HTMLStripTransformer" 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}'"> <field column="id" name="id" /> <field column="title" name="title" /> <field column="content" name="content" stripHTML="true" /> </entity> </document> </dataConfig>
2,咱們在上述文中最後Execute時,使用firebug或其餘調試插件拿到真實請求的地址(去掉了一些無用參數):mysql
增量建索引連接sql
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調用方法:apache
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就行。ui
相關說明:url
主要原理:是利用率每次咱們進行import的時候在solr.home的conf下面生成的dataimport.properties文件,此文件裏面有最近一次導入的相關信息,如:
個人文件位置爲.net
/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:設置建索引後是否自動優化。