Something wrong with TextDatasetFactory



我正在使用Jena和Lucene进行文本搜索。运行它后,出现了一些错误。它显示在Dataset ds = TextDatasetFactory.createLucene(ds1, dir, new TextIndexConfig(entDef));Dataset ds = createCode();。我的完整代码如下所示:

public class JenaTextSearch {
static {LogCtl.setLog4j();
BasicConfigurator.configure();}
static Logger log = LoggerFactory.getLogger("JenaTextSearch");
public static void main (String ...argv)
{
Dataset ds = createCode();
//loadData(ds, "data.ttl");
queryData(ds);
}
public static Dataset createCode()
{
//base data
Dataset ds1 = DatasetFactory.create();
Model defaultModel = ModelFactory.createDefaultModel();
defaultModel.read("to_index/data.ttl", "N-TRIPLES");
ds1.setDefaultModel(defaultModel);

//define the index mapping
EntityDefinition entDef = new EntityDefinition ("uri", "text", ResourceFactory.createProperty(App.URI_PREFIX,"content"));
Directory dir = null;
try {
dir = new SimpleFSDirectory(Paths.get("index")); //lucene index directory
}
catch (IOException e) {
e.printStackTrace();
}
//join together into a dataset
Dataset ds = TextDatasetFactory.createLucene(ds1, dir, new TextIndexConfig(entDef));
return ds1;
}
public static void queryData(Dataset dataset)
{
String prefix = "PREFIX email: <" + App.URI_PREFIX+">" +
"PREFIX text: <http://jena.apache.org/text#>";
long startTime = System.nanoTime();
System.out.println("Email's content contains 'good'");
String query = "SELECT * WHERE " +
"{ ?s text:query (email:content 'good'." +
" ?s email:content ?text . " +
" }" ;
dataset.begin(ReadWrite.READ);
try {
Query q = QueryFactory.create(prefix+"n"+query);
QueryExecution qexec = QueryExecutionFactory.create(q, dataset);
QueryExecUtils.executeQuery(q, qexec);
}finally { dataset.end();}
long finishTime = System.nanoTime();
double time = (finishTime-startTime)/1.0e6;
System.out.println ("Query "+String.format("FINISH - %.2fms", time));
startTime = System.nanoTime();
System.out.println("Email's content contains 'bad'");
query = "SELECT * WHERE" +
"{ (?s ?score ?lit) text:query (email:content 'bad' "highlight:s:<em class='hiLite'> | e:</em>") ." +
" ?s email:content ?text . " +
" }" ;
dataset.begin(ReadWrite.READ);
try {
Query q = QueryFactory.create(prefix+"n"+query);
QueryExecution qexec = QueryExecutionFactory.create(q, dataset);
QueryExecUtils.executeQuery(q, qexec);
} finally { dataset.end() ; }
finishTime = System.nanoTime();
time = (finishTime-startTime)/1.0e6;
System.out.println("Query "+String.format("FINISH - %.2fms",  time));
}}

因为我是新手,所以从字面上看,我不明白它有什么问题。也许它在TextDatasetFactory或其他东西中变得很重要。请告诉我。

PS:我从这里得到了这些代码,从那里没有任何错误。 再次附言:错误仅在我编译它时显示(控制台中的红线(,如下所示:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/analysis/miscellaneous/PerFieldAnalyzerWrapper
at org.apache.jena.query.text.TextDatasetFactory.createLuceneIndex(TextDatasetFactory.java:109)
at org.apache.jena.query.text.TextDatasetFactory.createLucene(TextDatasetFactory.java:136)
at main.JenaTextSearch.createCode(JenaTextSearch.java:70)
at main.JenaTextSearch.main(JenaTextSearch.java:42)

JenaTextSearch.java是有错误的项目。

"java.lang.NoClassDefFoundError" - 这是来自Java的错误,说缺少某些东西。 它是运行时类路径中缺少的耶拿文本依赖项(此处为 Lucene(。

最好使用 maven 或 gradle 等构建工具。

依赖关系包括:(这取自mvn dependency:tree;mvn dependency:build-classpath将为您构建一个类路径,如果您想将其包含在其他地方,请将其打印出来(。

[INFO] +- org.apache.lucene:lucene-core:jar:7.4.0:compile
[INFO] +- org.apache.lucene:lucene-analyzers-common:jar:7.4.0:compile
[INFO] +- org.apache.lucene:lucene-queryparser:jar:7.4.0:compile
[INFO] |  +- org.apache.lucene:lucene-queries:jar:7.4.0:compile
[INFO] |  - org.apache.lucene:lucene-sandbox:jar:7.4.0:compile
[INFO] +- org.apache.lucene:lucene-highlighter:jar:7.4.0:compile
[INFO] |  +- org.apache.lucene:lucene-join:jar:7.4.0:compile
[INFO] |  - org.apache.lucene:lucene-memory:jar:7.4.0:compile
[INFO] +- org.apache.lucene:lucene-backward-codecs:jar:7.4.0:compile

相关内容

  • 没有找到相关文章

最新更新