【问题标题】:Creating a Lucene index for an existing Apache Jena TDB to implement text search为现有的 Apache Jena TDB 创建 Lucene 索引以实现文本搜索
【发布时间】:2013-07-31 00:50:43
【问题描述】:

我有一个大型 Apache Jena TDB,我想使用 Apache Jena 2.10.2 构建一个 Lucene 索引,以用于新的文本搜索功能。我发现文档很难遵循。

我首先尝试在代码中使用配置,但遇到了依赖问题。 lecene-core 和 solr-solrj 的任何组合都会导致某些“classNotFound”错误或“StandardAnalyzer overrides final method 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) ;

我认为唯一的解决方案可能是创建一个文本数据集汇编器,但如果有人对在代码中创建它有任何建议,我更愿意这样做。

【问题讨论】:

  • 报告错误时,如果您提供详细信息会有所帮助,例如“classNotFound” - 哪个类?

标签: jena lucene text-search tdb


【解决方案1】:

这个例子正是 Jena 的例子,它确实有效。

您似乎对 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/

【讨论】:

  • 是的,我错过了 lucene 分析器依赖项,谢谢。但是,我仍然不确定如何解决为现有 TDB 创建索引的更大问题。我相信问题可能是我缺乏对 EntityDefinition 的理解。你能解释一下 entityField 和 primaryField 的来源吗?这些参数是否应该特定于我的 TDB?加载默认模型与我的不匹配的数据时可能会出现另一个错误来源:'Model m = dataset.getDefaultModel(); RDFDataMgr.read(m, DBDirectory);'?有什么想法吗?
  • 嗨@bmoran 你解决问题了吗?您如何将 TDB 加载到模型中?
  • 是的,这个问题已经解决了。这个问题更多是关于如何基于 TDB 创建一个 Lucene 索引(用于实现文本搜索),并通过切换依赖版本解决。某些 Jena 依赖项版本不兼容。如果您在将 TDB 加载到现有模型时遇到问题,我相信 Jena 文档中有示例,但我已经有几个月没有使用 Jena了。不过,我从未将 TDB 加载到现有模型中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
相关资源
最近更新 更多