2013-07-30 117 views
0

我有一個大的Apache Jena TDB,我想要使用Apache Jena 2.10.2構建一個Lucene索引以用於新的文本搜索功能。我發現文檔很難遵循。爲現有的Apache Jena TDB創建Lucene索引以實現文本搜索

我第一次嘗試在代碼中使用配置,但遇到依賴問題。 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) ; 

我認爲唯一的解決辦法可能是創建一個文本數據集彙編,但如果任何人有在代碼中創建這個意見,我更願意這樣做的。

+0

時報告錯誤,它幫助,如果你給的細節如「classNotFound」 - 哪一類? – AndyS

回答

1

這個例子正是耶拿的一個例子,它可以工作。

看起來你對jar版本有困惑。你有沒有嘗試過使用maven來解決依賴關係?看着「mvn依賴:樹」顯示你使用的是什麼版本。

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/

+2

是的,我錯過了lucene分析器依賴項,謝謝。但是我仍然不確定如何解決爲現有TDB創建索引這一更大的問題。我相信這個問題可能是我對EntityDefinition的理解不夠。你能解釋一下entityField和primaryField的來源嗎?這些參數是否應該針對我的TDB?加載默認模型不匹配的數據時,可能會出現其他錯誤來源:'Model m = dataset.getDefaultModel(); RDFDataMgr.read(m,DBDirectory);'?有什麼想法嗎? – bmoran

+0

嗨@bmoran你解決了問題嗎?如何將TDB加載到模型中? –

+0

是的,這個問題已經解決了。這個問題更多的是關於如何基於TDB創建Lucene索引(用於實現文本搜索),並通過切換依賴版本來解決。一些耶拿依賴版本是不兼容的。如果您在將TDB加載到現有模型中時遇到問題,我相信Jena文檔中有一些示例,但我在幾個月內沒有使用過Jena。儘管我從未將TDB加載到現有模型中。 – bmoran