English 中文(简体)
我如何将lucene索引存储在数据库中?
原标题:
  • 时间:2009-02-04 07:16:02
  •  标签:

这是我的示例代码:

MysqlDataSource dataSource = new MysqlDataSource();

dataSource.setUser("root");
dataSource.setPassword("ncl");
dataSource.setDatabaseName("userdb");
dataSource.setEmulateLocators(true); //This is important because we are dealing with a blob type data field
try{    
    JdbcDirectory jdbcDir = new JdbcDirectory(dataSource, new MySQLDialect(), "tttable");
    StandardAnalyzer analyzer = new StandardAnalyzer();
    IndexWriter writer = new IndexWriter(jdbcDir, analyzer,false);
    writer.optimize();
    writer.close();
}catch(Exception e){
System.out.print(e);
}

我卡在这一行: IndexWriter writer = new IndexWriter(jdbcDir,analyzer,false);

每当我尝试运行这段代码时,我都会收到以下异常:

------"org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: PhantomReadLock[write.lock/tttable]"------------

我无法找出代码的问题。可能是它与JAR相容性的问题。

我无法获得IndexWriter对象。

问题回答

看起来索引被锁定了。如果您确定不应该锁定,则可能出现了一些进程崩溃而没有进行正确的清理。

尝试添加这行

jdbcDir.clearLock();

创建索引编写器之前。

别把它放那儿,你通常会让Lucene管理锁,以防止两个IndexWriter向同一个索引写入。

你应该先创建表格。

请尝试使用这样的代码:

if (!dir.tableExists())
    {
        dir.create();
    }

锁由IndexWriter制造。如果有错,锁不会被释放,因此您需要在创建新的写入器之前释放所有锁(IndexWriter类的静态方法)。

IndexWriter.unlock(dir);




相关问题
热门标签