将 Lucene 与 H2 数据库一起使用时出错

Posted

技术标签:

【中文标题】将 Lucene 与 H2 数据库一起使用时出错【英文标题】:Error while using Lucene with H2 Database 【发布时间】:2018-12-07 06:52:06 【问题描述】:

我想在我的项目中使用 H2 数据库(嵌入式)实现小型全文搜索。据我所知,我必须将 Lucene 用于全文引擎来查找相关结果(不仅包含结果)。 但我不能使用它。这个块是Lucene启动:

FullTextLucene.init(connection);
FullTextLucene.createIndex(connection, "PUBLIC", Tables.COURSES_DETAIL, Columns.NAME);

我也是这样用的:

  stmt.execute(
      "create alias if not exists FTL_INIT for \"org.h2.fulltext.FullTextLucene.init\"");
  stmt.execute("call FTL_INIT()");
  stmt.execute(
      String.format("CALL FTL_CREATE_INDEX('PUBLIC','%s',%s)", Tables.COURSES_DETAIL, "NULL"));

但是这个错误发生在运行时:

Error creating or initializing trigger "FTL_COURSES_DETAIL" object, class "org.h2.fulltext.FullTextLucene$FullTextTrigger", cause: "org.h2.message.DbException: Class ""org.h2.fulltext.FullTextLucene$FullTextTrigger"" not found [90086-197]"; see root cause for details; SQL statement:
CREATE TRIGGER IF NOT EXISTS "PUBLIC"."FTL_COURSES_DETAIL" AFTER INSERT, UPDATE, DELETE, ROLLBACK ON "PUBLIC"."COURSES_DETAIL" FOR EACH ROW CALL "org.h2.fulltext.FullTextLucene$FullTextTrigger"

在我将 H2 库降级到最新的“稳定”版本 (1.4.196) 后,错误已更改:

Caused by: java.lang.NoSuchMethodError: org.apache.lucene.store.FSDirectory.open(Ljava/io/File;)Lorg/apache/lucene/store/FSDirectory;

有时会出现这个错误:

Exception calling user-defined function: "init(conn1: url=jdbc:default:connection user=INFC): org.apache.lucene.store.FSDirectory.open(Ljava/io/File;)Lorg/apache/lucene/store/FSDirectory;"; SQL statement:
call FTL_INIT()

【问题讨论】:

【参考方案1】:

我找到了解决方案。但我知道这不是最好的。

我将 Lucene lib 降级到 3.6.2 并使用普通查询而不是 FullTextLucene 函数。

【讨论】:

以上是关于将 Lucene 与 H2 数据库一起使用时出错的主要内容,如果未能解决你的问题,请参考以下文章

R2dbc无法使用tcp与h2数据库一起使用

在数据库中使用带有 H2 的 Hibernate 时出错

无法将 setArray JDBC(整数)与 H2 数据库一起使用

将 DATE 函数与 HSQL 一起使用时出错

将 mogenerator 与 Core Data 实体一起使用会导致保存数据存储时出错

将 OneToOne/ManyToOne 与 JPA 和多个数据源一起使用时出错