CustomAnalyser Lucene Connector GraphDB

У меня проблемы с выяснением того, как указать собственную реализацию анализатора внутри GraphDB. После прочтения документации и нескольких других постов у меня возникли проблемы с зависимостями.jar.

Для того, чтобы построить шаблон CustomAnalyzer а также CustomAnalyzerFactory классы, я должен был использовать lucene.jar а также lucene-core.jar находится в lib/plugins/lucene, Мой файл сборки 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')

}

Замечания: libs/lucene это папка в моем проекте Gradle, где я скопировал lucene.jar а также lucene-core.jar находится в lib/plugins/lucene дистрибутива автономного сервера graphdb

После того, как я скомпилирую код и создаю файл jar, используя gradle clean jar Я копирую это в lib/plugins/lucene-connector,

Я перезапускаю graph-db, захожу в разъемы и пытаюсь добавить lucene-разъем с помощью пользовательского интерфейса. Мне удается добраться до того места, где вы можете указать свой анализатор. Однако, когда я указываю com.example.CustomAnalyzer, я получаю следующее сообщение об ошибке.

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

После некоторых поисков я обнаружил, что есть 2 файла lucene-core.jar. Один в libs/plugins/lucene а другой в libs/plugins/lucene-connector, lucene-core.jar в libs/plugins/lucene-connector не имеет ASCIIFoldingFilter учебный класс.

Я даже пытался создать fatJar со всеми зависимостями, содержащимися в одном банке, но когда я это делаю, GraphDB не может загрузить ни один из соединителей.

Не совсем уверен, где я ошибаюсь, чувствую, что это как-то связано с тем, как я собираю и ссылаюсь на файлы jar.


Я также попытался удалить ASCIIFilter из CustomAnalyzer, но получил новый набор ошибок:

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 ответ

GraphDB предлагает два механизма для полнотекстового поиска. Первым вариантом является плагин GraphDB Lucene Connector, который является рекомендуемым подходом для любой новой разработки. Другой альтернативой является плагин GraphDB FTS, использующий немного другой подход к индексированию. Основным его ограничением из-за характера индекса является отсутствие автоматической синхронизации при изменении данных RDF.

В вашем примере вы хотите расширить Lucene Connector, но на самом деле изменить двоичный файл плагина FTS. Чтобы упростить инструкции и все необходимые шаги для разработки, тестирования и развертывания пользовательского анализатора, я подготовил публичный проект, в котором необходимо попробовать:

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

Другие вопросы по тегам