我如何在数据库中存储Lucene索引?

这是我的示例代码:

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();

在创建indexWriter之前.

别把它留在那里,很难.通常,您希望让Lucene管理锁,以禁止两个IndexWriter写入同一索引.

上一篇:java-如何在Lucene 6中对数字字段进行排序


下一篇:Hibernate Search索引单个租户