我正在从2.37 GB的RDF数据集中查询,其中包含大约1700万个三元组,并且还保持数据集的lucence索引。我尝试了jena-text模块的文本查询,它基于存储的lucene索引进行搜索。但是它的性能非常慢,搜索查询需要4秒或更长时间才能完成。
然而,当我使用luncene index viewer' luke'。索引似乎没有问题,当我从索引中搜索特定术语时,搜索它需要几毫秒。
所以问题在于我无法认识到为什么在jena-texr'
上需要花费这么多时间。以下是sparql查询:
SELECT ?subj ?status ?version ?label
WHERE {
?subj rdf:type ts:Valueset;
text:query 'cancer';
ts:entityStatus ?status;
OPTIONAL { ?subj ts:versionID ?version . } .
OPTIONAL { ?subj rdfs:label ?label . } .
}
LIMIT <limit>
OFFSET <offset>
这是jena代码:
store.getDataset().begin(ReadWrite.READ) ;
Query query = QueryFactory.create(queryStr);
QueryExecution qexec = QueryExecutionFactory.create(query , store.getDataset()) ;
ResultSet results = qexec.execSelect();
while(results.hasNext()){
QuerySolution qs = results.next();
以下是创建索引数据集的代码。
Dataset baseDS = TDBFactory.createDataset(storePath.trim());
//define index mapping
EntityDefinition entityDef = new EntityDefinition("uri", "property", RDFS.label.asNode());
entityDef.set("property", TS.conceptCode.asNode());
entityDef.set("property", SKOS_XL.literalForm.asNode());
entityDef.set("property", SKOS.note.asNode());
entityDef.set("property", SKOS.definition.asNode());
//create in file lucene
File indexDir = new File(textIndexPath);
Directory luceneDir = null;
try {
luceneDir = FSDirectory.open(indexDir);
} catch (IOException e) {
e.printStackTrace();
}
// Join together into a dataset
Dataset indexedDS = TextDatasetFactory.createLucene(baseDS, luceneDir, entityDef) ;
请允许任何人确定代码是否存在任何问题以及索引数据集的配置方式。感谢