Lucene 2 通过updateDocument更新索引

  1. package com.lucene;   
  2.   
  3. import java.io.IOException;   
  4.   
  5. import org.apache.lucene.analysis.standard.StandardAnalyzer;   
  6. import org.apache.lucene.document.Document;   
  7. import org.apache.lucene.document.Field;   
  8. import org.apache.lucene.index.IndexWriter;   
  9. import org.apache.lucene.index.Term;   
  10. import org.apache.lucene.queryParser.QueryParser;   
  11. import org.apache.lucene.search.Hits;   
  12. import org.apache.lucene.search.IndexSearcher;   
  13. import org.apache.lucene.search.Query;   
  14.   
  15. public class UpdateDocument {   
  16.        
  17.     private static String path = "d:/index";   
  18.        
  19.        
  20.     public static void main(String[] args){   
  21. //      addIndex();   
  22.         updateIndex();   
  23.         search("李四");   
  24.         search("王五");   
  25.     }   
  26.        
  27.     public static void addIndex(){   
  28.         try {   
  29.             IndexWriter write = new IndexWriter(path,new StandardAnalyzer(),true);   
  30.                
  31.             Document doc = new Document();   
  32.             doc.add(new Field("id","123456",Field.Store.YES,Field.Index.UN_TOKENIZED));   
  33.             doc.add(new Field("userName","张三",Field.Store.YES,Field.Index.TOKENIZED));   
  34.             doc.add(new Field("comefrom","北京",Field.Store.YES,Field.Index.TOKENIZED));   
  35.                
  36.             write.addDocument(doc);   
  37.                
  38.             write.close();   
  39.                
  40.         } catch (IOException e) {   
  41.             e.printStackTrace();   
  42.         }   
  43.     }   
  44.        
  45.        
  46.     public static void updateIndex(){   
  47.         try {   
  48.                
  49.             IndexWriter write = new IndexWriter(path,new StandardAnalyzer(),false);   
  50.             Document docNew = new Document();   
  51.             docNew.add(new Field("id","123456",Field.Store.YES,Field.Index.UN_TOKENIZED));   
  52.             docNew.add(new Field("userName","王五",Field.Store.YES,Field.Index.TOKENIZED));   
  53.             Term term = new Term("id","123456");   
  54.             /**  
  55.               调用updateDocument的方法,传给它一个新的doc来更新数据,  
  56.               Term term = new Term("id","1234567");  
  57.               先去索引文件里查找id为1234567的Doc,如果有就更新它(如果有多条,最后更新后只有一条)。如果没有就新增.  
  58.                
  59.               数据库更新的时候,我们可以只针对某个列来更新,而lucene只能针对一行数据更新。  
  60.              */  
  61.             write.updateDocument(term, docNew);   
  62.                
  63.             write.close();   //注意在这里一定要关闭write
  64.                
  65.         } catch (IOException e) {   
  66.             e.printStackTrace();   
  67.         }   
  68.     }   
  69.   
  70.     public static Query queryParser(String str){   
  71.         QueryParser queryParser = new QueryParser("userName"new StandardAnalyzer());   
  72.         try {   
  73.             Query query =  queryParser.parse(str);   
  74.             return query;   
  75.         } catch (Exception e) {   
  76.             e.printStackTrace();   
  77.         }   
  78.         return null;   
  79.     }   
  80.        
  81.     public static void search(String str){   
  82.         try {   
  83.             IndexSearcher search = new IndexSearcher(path);   
  84.                
  85.             Query query = queryParser(str);   
  86.                
  87.             Hits hits = search.search(query);   
  88.             if(hits==null){   
  89.                 return;   
  90.             }   
  91.             if(hits.length() == 0){   
  92.                 System.out.println(" 没有搜索到'" + str+"'");   
  93.                 return;   
  94.             }   
  95.             for (int i = 0; i < hits.length(); i++) {   
  96.                 Document doc = hits.doc(i);   
  97.                 System.out.println("id = "+hits.id(i));   
  98.                 System.out.println("own id = " + doc.get("id"));   
  99.                 System.out.println("userName = "+doc.get("userName"));   
  100.                 System.out.println("come from  = "+doc.get("comefrom"));   
  101.                 System.out.println("");   
  102.             }   
  103.                
  104.         } catch (Exception e) {   
  105.             e.printStackTrace();   
  106.         }   
  107.     }   
  108.   
  109. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值