Lucene指数的增量更新

时间:2017-10-16 09:04:41

标签: java mysql lucene

我对Lucene有点新鲜,我正在使用一个我之前编入索引的庞大数据库。问题是,如果将新内容添加到其中,则不是每次索引整个表/数据库的有效方法。我使用lucene3.6.2。我想创建一个索引函数,它将新数据添加到现有的Lucene索引文件中,而不需要updateDocument(或在lucene中删除和重新索引)。我的意思是说它不应该创建新文件来存储新文档,而应该将它们插入到以前的索引文件中,而不删除索引文件中的先前数据,也不需要重新索引整个数据库。其索引应该从先前索引项的最后一个索引位置开始,并且应该与先前生成的索引一起搜索。这是我用于创建索引的索引器代码:

public String TestIndex() throws IOException,SQLException
{
     System.out.println("preparing dictionary");
     String output="";
     Long i=0l;
     ResultSet rs = null;
     URL u = this.getClass().getClassLoader(). getResource(SearchConstant.INDEX_DIRECTORY_DICTIONARYDETAILS);
     String dirLoc = u.getPath().replace("%20", " ");
     Directory index = FSDirectory.open(new File(dirLoc));                                                                                //new RAMDirectory();
     StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
     IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_30,analyzer);
     config.setOpenMode(OpenMode.CREATE);
     IndexWriter w = new IndexWriter(index, config);

     try {
         String SQL = "Select * from test";

         cm = new DbUtility();
         rs = cm.getData(SQL);

         // 1. create the index
         while (rs.next()) {
            Document doc = new Document();

            doc.add(new Field("id",rs.getObject(1).toString() , Field.Store.YES, Field.Index.ANALYZED));
            doc.add(new Field("Heading",rs.getObject(2).toString() , Field.Store.YES, Field.Index.ANALYZED));

              w.addDocument(doc);
              i = i + 1;
           }

            System.out.println("I " + i.toString());
        }
        catch (Exception e) {
            System.out.println("I in Error " + i.toString());
            System.out.println("Error while retrieving data: "+e.getMessage());
        }

        w.close();
        rs.close();

        return output;
   }

0 个答案:

没有答案