Solr创建索引源码解析

查看了下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 的下载地址请点这里

相关阅读:

Solr3.6.1 在Tomcat6下的环境搭建

基于Tomcat的Solr3.5集群部署

在Linux上使用Nginx为Solr集群做负载均衡

Linux下安装使用Solr

Ubuntu 12.04 LTS 上通过 Tomcat 部署 Solr 4

Solr实现Low Level查询解析(QParser)

基于Solr 3.5搭建搜索服务器

Solr 3.5开发应用教程 PDF高清版

Solr 4.0 部署实例教程

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/64d95134413939bb0ecdb114e34209ce.html