nutch索引中添加自己的Field

点击打开链接


向nutch中添加自己的field也是比较简单的,和直接调用lucene向索引中添加field基本相同,首先设定添加的field是否要被存储分词索引,然后将field添加到NutchDocument中,其他的工作就nutch会自动完成:

(1)首先要在Indexer的index函数配置执行索引工作前设定添加Field的属性,因为添加的pagetime是用来进行对结果排序使用的,所以它的属性不能被分词需要被索引,设置属性代码改动如下:

[html] view plaincopy

    /**  
     * 修改方法:根据爬取深度建立索引,depth就是爬取深度  
     * @param luceneDir  
     * @param crawlDb  
     * @param linkDb  
     * @param segments  
     * @param depth  
     * @throws IOException  
     */  
    public void index(Path luceneDir, Path crawlDb,  
      Path linkDb, List<Path> segments, int depth)throws IOException {  
       
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
       long start = System.currentTimeMillis();  
       LOG.info("Indexer: starting at " + sdf.format(start));  
      
       final JobConf job = new NutchJob(getConf());  
       job.setJobName("index-lucene " + luceneDir);  
      
       IndexerMapReduce.initMRJob(crawlDb, linkDb, segments, job, depth);  
       FileOutputFormat.setOutputPath(job, luceneDir);  
      
       LuceneWriter.addFieldOptions("segment", LuceneWriter.STORE.YES, LuceneWriter.INDEX.NO, job);  
       LuceneWriter.addFieldOptions("digest", LuceneWriter.STORE.YES, LuceneWriter.INDEX.NO, job);  
       LuceneWriter.addFieldOptions("boost", LuceneWriter.STORE.YES, LuceneWriter.INDEX.NO, job);  
       /**  
        * 设置pagetime的属性值  
        */  
       LuceneWriter.addFieldOptions("pagetime", LuceneWriter.STORE.YES, LuceneWriter.INDEX.UNTOKENIZED, job);  

 NutchIndexWriterFactory.addClassToConf(job, LuceneWriter.class);  
  
   JobClient.runJob(job);  
   long end = System.currentTimeMillis();  
   LOG.info("Indexer: finished at " + sdf.format(end) + ", elapsed: " + TimingUtil.elapsedTime(start, end));  
   
}  
(2)因为IndexerMapReduce负责将需要索引的数据添加到NutchDocument中,然后由Nutch完成索引建立工作,所以需要在这个地方将我们添加的pageTime属性添加到NutchDocument文档中,代码改动如下:

  1. /** 
  2.  * 先比较dbDatum和fetchDatum中的pageTime的值,选择最大的作为索引值。 
  3.  */  
  4. long temp=dbDatum.getPageTime();  
  5. if(temp<fetchDatum.getPageTime()){  
  6.     temp=fetchDatum.getPageTime();  
  7. }  
  8. doc.add("pagetime", temp); 
注:修改成这样不会出错,暂时不明白
long temp=dbDatum.getFetchTime();  
    if(temp<fetchDatum.getFetchTime()){  
        temp=fetchDatum.getFetchTime();  
    }  
    doc.add("pagetime", temp);

运行程序,在最终的索引文件中,会看到我们添加的Field。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值