查看了下solr生成索引的源码,特记下 (昨天写的 ,今天看了感觉非常乱,今天特意整理下)
先说下创建索引源码流程:
源码类:
1.CommonHttpSolrServer (SolrServer的子类)
2.SolrServer(抽象类)
3.SolrRequest (基类)
4.AbstractUpdateRequest (抽象类、SolrRequest的子类)
5.UpdateRequest (AbstractUpdateRequest的子类)
6.SolrInputDocument (设置需要索引的名称和值、这个应该放在第一位)
创建索引代码:
查询数据库数据,或者其他文档数据进行索引
private void updateBook(String sql, String url, String idColumn,
String timeColumn,BufferedWriter dataFile) throws Exception {
long start = System.currentTimeMillis();
<SPAN></SPAN> SolrUtil solrUtil = new SolrUtil(url);//初始化索引
SolrDocument doc = SqlSh.getSolrMaxDoc(solrUtil, idColumn, timeColumn);
if (doc == null) {
CommonLogger.getLogger().error("solr no data.");
return;
}
int maxId = Integer.parseInt(doc.get(idColumn).toString());
long maxTime = Long.parseLong(doc.get(timeColumn).toString())*1000;
Date maxDate = new Date(maxTime);
DateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//获取数据库需要索引的数据
ResultSet rs = stmt_m.executeQuery(String.format(sql,
dateFormat2.format(maxDate)));
//获取需要创建索引的key
initColumeMeta(rs.getMetaData());
//解析数据并索引
parseRs(rs, solrUtil);
rs.close();
//优化索引
solrUtil.server.optimize();
CommonLogger.getLogger().info(
"update book time:" + (System.currentTimeMillis() - start)
/ 1000 + "s");
}
2.咱们看下上面代码的parseRs方法:
//下面是简单的解析数据方法并写索引
private void parseRs(ResultSet rs, SolrUtil solrUtil) throws <SPAN></SPAN> Exception { Collection<SolrInputDocument> docs=new ArrayList<SolrInputDocument>(); SolrInputDocument doc = null; int locBk = 0; boolean flag=true; StringBuilder sb=null; String vl=null; try { while (rs.next()) { doc = new SolrInputDocument(); for (int i = 0; i < ToolMain.columnNames.length; i++) { doc.addField( ToolMain.columnNames[i], getColumnValue( rs.getObject(ToolMain.columnNames[i]), ToolMain.columnTypes[i]));//此方法为设置一个域,可以添加一个参数来设置权重 } docs.add(doc); locBk++; if (docs.size() >= 1000) { solrUtil.addDocList(docs);//创建索引和提交索引操作都在这里面 docs.clear(); } } if (docs.size() > 0) { solrUtil.addDocList(docs); docs.clear(); } } catch (Exception e) { throw e; } finally { docs.clear(); docs = null; } }Solr 的详细介绍:请点这里
Solr 的下载地址:请点这里
相关阅读:
在 Ubuntu 12.04 LTS 上通过 Tomcat 部署 Solr 4