查看了下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
