[Lucene]用lucene为数据库搜索建立增量索引

用 lucene 建立索引不可能每次都重新开始建立,而是按照新增加的记录,一次次的递增
建立索引的IndexWriter类,有三个参数

IndexWriter writer = new IndexWriter(path, new StandardAnalyzer(),isEmpty);


其中第三个参数是bool型的,指定它可以确定是增量索引,还是重建索引.
对于从数据库中读取的记录,譬如要为文章建立索引,我们可以记录文章的id号,然后下次再次建立索引的时候读取存下的id号,从此id后往下继续增加索引,逻辑如下.
建立增量索引,主要代码如下

public void createIndex(String path)
{
     Statement myStatement 
= null;
     String articleId
="0";
     
//读取文件,获得文章id号码,这里只存最后一篇索引的文章id
    try { 
        FileReader fr 
= new FileReader("**.txt");
        BufferedReader br 
= new BufferedReader(fr);                 
        articleId
=br.readLine();
        
if(articleId==null||articleId=="")
        articleId
="0";
        br.close();
        fr.close(); 
      } 
catch (IOException e) { 
        System.out.println(
"error343!");
        e.printStackTrace();
      }
    
try {
        
//SQL语句,根据id读取下面的内容
        String SQLText = "*****"+articleId;
        myStatement 
= conn.createStatement();
        ResultSet rs 
= myStatement.executeQuery(sqlText);
       
//写索引
        while (rs.next()) {
         Document doc 
= new Document();
         doc.add(Field.Keyword(
"**", DateAdded));
         doc.add(Field.Keyword(
"**", articleid));
         doc.add(Field.Text(
"**", URL));    
         doc.add(Field.Text(
"**", Content));
         doc.add(Field.Text(
"**", Title));    
         
try{
            writer.addDocument(doc);
          }
          
catch(IOException e){
            e.printStackTrace();
         }
           
//将我索引的最后一篇文章的id写入文件
          try { 
           FileWriter fw 
= new FileWriter("**.txt");
           PrintWriter out 
= new PrintWriter(fw);    
           out.close();
           fw.close();
           } 
catch (IOException e) { 
             e.printStackTrace();
           }
         }
            ind.Close();
            System.out.println(
"ok.end");
         }
         
catch (SQLException e){
            e.printStackTrace();
        }
        
finally {
            
//数据库关闭操作
        }        
    }

然后控制是都建立增量索引的时候根据能否都到id值来设置IndexWriter的第三个参数为true 或者是false

 boolean isEmpty = true;
 
try { 
    FileReader fr 
= new FileReader("**.txt");
    BufferedReader br 
= new BufferedReader(fr);                 
    
if(br.readLine()!= null) {
        isEmpty 
= false;
     }
     br.close();
     fr.close(); 
    } 
catch (IOException e) { 
       e.printStackTrace();
  }
            
  writer 
= new IndexWriter(Directory, new StandardAnalyzer(),isEmpty);

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏