Создание индекса Lucene для существующего TDB Apache Jena для реализации текстового поиска

У меня есть большой TDB Apache Jena, я хочу создать индекс Lucene с использованием Apache Jena 2.10.2 для использования с новой функцией текстового поиска. Мне трудно следовать документации.

Сначала я попытался использовать конфигурацию в коде, но у меня возникли проблемы с зависимостями. Любая комбинация lecene-core и solr-solrj приведет либо к определенным ошибкам classNotFound, либо к ошибке StandardAnalyzer переопределяет конечный метод tokenStream. Пример кода:

Dataset ds1 = DatasetFactory.createMem() ;

EntityDefinition entDef = new EntityDefinition("uri", "text", RDFS.label) ;

Directory dir =  new RAMDirectory();

// Have also tried creating the index in a file
File indexDir = new File("luceneIndexes");
Directory dir = FSDirectory.open(indexDir);

// Fails on this line
Dataset ds = TextDatasetFactory.createLucene(ds1, dir, entDef) ;

Я думаю, что единственным решением может быть создание ассемблера набора текстовых данных, но если у кого-то есть совет по созданию этого в коде, я бы предпочел сделать это таким образом.


person bmoran    schedule 30.07.2013    source источник
comment
При сообщении об ошибках полезно указать подробности, например classNotFound - какой класс?   -  person AndyS    schedule 31.07.2013


Ответы (1)


Это как раз тот пример из Йены, который действительно работает.

Похоже, у вас путаница в версиях jar. Вы пробовали использовать maven для разрешения зависимостей? Посмотрев на "mvn dependency: tree", вы увидите, какие версии используются.

jena-text построен для Lucene 4.3.1 или Solr 4.3.1.

См. POM по адресу: https://repository.apache.org/content/groups/snapshots/org/apache/jena/jena-text/1.0.0-SNAPSHOT/

person AndyS    schedule 31.07.2013
comment
Да, мне не хватало зависимости анализатора lucene, спасибо. Однако я все еще не уверен, как решить более серьезную проблему создания индекса для существующего БТ. Я считаю, что проблема может заключаться в моем непонимании EntityDefinition. Не могли бы вы объяснить, откуда берутся entityField и primaryField. Должны ли эти параметры быть специфичными для моего TDB? Другой источник ошибки может возникнуть при загрузке данных, которые модель по умолчанию не соответствует моей: 'Модель m = dataset.getDefaultModel (); RDFDataMgr.read (m, DBDirectory); '? Есть предположения? - person bmoran; 31.07.2013
comment
Привет, @bmoran, проблема решена? Как вы загружаете свой TDB в модель? - person Claudio Pomo; 07.07.2014
comment
Да, проблема решена. Эта проблема больше касалась того, как создать индекс Lucene (используемый для реализации текстового поиска) на основе TDB, и была решена путем переключения версий зависимостей. Некоторые версии зависимостей Jena несовместимы. Если у вас возникли проблемы с загрузкой TDB в существующую модель, я считаю, что в документации Jena есть примеры, но я не использовал Jena несколько месяцев. Однако я никогда не работал с загрузкой TDB в существующую модель. - person bmoran; 08.07.2014