首页 文章

CustomAnalyser Lucene Connector GraphDB

提问于
浏览
1

我有问题想弄清楚如何在GraphDB中指定我自己的分析器实现 . 在阅读documentation和其他几个posts之后,我似乎遇到了.jar依赖项的问题 .

为了构建样板 CustomAnalyzerCustomAnalyzerFactory 类,我必须使用 lib/plugins/lucene 中的 lucene.jarlucene-core.jar . 我的gradle构建文件如下所示:

group 'com.example'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile fileTree(dir: 'libs/lucene', include: '*.jar')

}

Note: libs/lucene is the folder in my gradle project where I copied the lucene.jar and lucene-core.jar located in lib/plugins/lucene of the graphdb stand-alone server distribution

在我编译代码并使用 gradle clean jar 创建jar文件后,我将其复制到 lib/plugins/lucene-connector .

我重新启动graph-db,进入连接器并尝试使用UI添加lucene-connector . 我设法一直到你可以指定分析仪的地方 . 但是,当我指定com.example.CustomAnalyzer时,我收到以下错误消息 .

Caused by: java.lang.NoClassDefFoundError: org/apache/lucene/analysis/ASCIIFoldingFilter

经过一番挖掘后,我发现有2个lucene-core.jar文件 . 一个在 libs/plugins/lucene ,另一个在 libs/plugins/lucene-connector . libs/plugins/lucene-connector 中的 lucene-core.jar 没有 ASCIIFoldingFilter 类 .

我甚至尝试创建一个包含在一个jar中的所有依赖项的fatJar,但是当我这样做时,graphdb无法加载任何连接器 .

不太确定,在我出错的地方,有一种感觉它与我如何构建和引用jar文件有关 .


我也试过从CustomAnalyzer中删除ASCIIFilter但是得到了一组全新的错误:

Caused by: com.ontotext.trree.sdk.BadRequestException: Unable to instantiate analyzer class, only analyzers with a default constructor or a constructor accepting single Version parameter are possible: com.example.CustomAnalyzer
    at com.ontotext.trree.plugin.externalsync.impl.lucene4.CreateAnalyzerUtil.instantiateAnalyzer(CreateAnalyzerUtil.java:70)
    at com.ontotext.trree.plugin.externalsync.impl.lucene4.CreateAnalyzerUtil.createAnalyzerFromClassName(CreateAnalyzerUtil.java:42)
    at com.ontotext.trree.plugin.externalsync.impl.lucene4.Lucene4ExternalStore.open(Lucene4ExternalStore.java:182)
    at com.ontotext.trree.plugin.externalsync.impl.lucene4.Lucene4ExternalStore.initImpl(Lucene4ExternalStore.java:718)
    ... 60 common frames omitted

1 回答

  • 1

    GraphDB提供了两种全文搜索机制 . 第一个选项是GraphDB Lucene Connector plugin,这是任何新开发的推荐方法 . 另一种选择是使用稍微不同的索引方法的GraphDB FTS plugin . 由于索引的性质,其主要限制是当RDF数据改变时缺乏自动同步 .

    在您的示例中,您希望扩展Lucene Connector,但实际上修改了FTS插件的二进制文件 . 为了简化开发,测试和部署自定义分析器的说明和所有必要步骤,我准备了一个公共项目来尝试:

    https://gitlab.ontotext.com/vassil.momtchev/custom-lucene-analyzer

相关问题