简体   繁体   English

NoSuchMethodError: org.apache.lucene.document.Field

[英]NoSuchMethodError: org.apache.lucene.document.Field

I have another project, jena full text search too, but i got errors in runtime.我还有另一个项目,jena 全文搜索,但我在运行时出错。 The errors show below:错误显示如下:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.lucene.document.Field.<init>(Ljava/lang/String;Ljava/lang/String;Lorg/apache/lucene/index/IndexableFieldType;)V
at org.apache.jena.query.text.TextIndexLucene.doc(TextIndexLucene.java:347)
at org.apache.jena.query.text.TextIndexLucene.addDocument(TextIndexLucene.java:308)
at org.apache.jena.query.text.TextIndexLucene.addEntity(TextIndexLucene.java:300)
at org.apache.jena.query.text.TextDocProducerTriples.change(TextDocProducerTriples.java:71)
at org.apache.jena.sparql.core.DatasetGraphMonitor.record(DatasetGraphMonitor.java:194)
at org.apache.jena.sparql.core.DatasetGraphMonitor.add$(DatasetGraphMonitor.java:114)
at org.apache.jena.sparql.core.DatasetGraphMonitor.add(DatasetGraphMonitor.java:108)
at org.apache.jena.sparql.core.GraphView.performAdd(GraphView.java:149)
at org.apache.jena.graph.impl.GraphBase.add(GraphBase.java:184)
at org.apache.jena.riot.system.StreamRDFLib$ParserOutputGraph.triple(StreamRDFLib.java:181)
at org.apache.jena.riot.lang.LangTurtle.emit(LangTurtle.java:57)
at org.apache.jena.riot.lang.LangTurtleBase.emitTriple(LangTurtleBase.java:486)
at org.apache.jena.riot.lang.LangTurtleBase.objectList(LangTurtleBase.java:352)
at org.apache.jena.riot.lang.LangTurtleBase.predicateObjectItem(LangTurtleBase.java:288)
at org.apache.jena.riot.lang.LangTurtleBase.predicateObjectList(LangTurtleBase.java:269)
at org.apache.jena.riot.lang.LangTurtleBase.triples(LangTurtleBase.java:250)
at org.apache.jena.riot.lang.LangTurtleBase.triplesSameSubject(LangTurtleBase.java:191)
at org.apache.jena.riot.lang.LangTurtle.oneTopLevelElement(LangTurtle.java:46)
at org.apache.jena.riot.lang.LangTurtleBase.runParser(LangTurtleBase.java:91)
at org.apache.jena.riot.lang.LangBase.parse(LangBase.java:41)
at org.apache.jena.riot.RDFParserRegistry$ReaderRIOTLang.read(RDFParserRegistry.java:191)
at org.apache.jena.riot.RDFParser.read(RDFParser.java:352)
at org.apache.jena.riot.RDFParser.parseURI(RDFParser.java:321)
at org.apache.jena.riot.RDFParser.parse(RDFParser.java:295)
at org.apache.jena.riot.RDFParserBuilder.parse(RDFParserBuilder.java:506)
at org.apache.jena.riot.RDFDataMgr.parseFromURI(RDFDataMgr.java:890)
at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:221)
at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:102)
at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:93)
at main.Search.loadData(Search.java:103)
at main.Search.main(Search.java:50)

I try to include org.apache.lucene.document.Field in my Lucene Lib but it doesn't work.我尝试在我的 Lucene Lib 中包含org.apache.lucene.document.Field但它不起作用。 I think it may be a problem in loadData in my codes.我认为这可能是我代码中loadData的问题。 The full codes in below:完整代码如下:

public class Search {
static String URI = "http://www.tutorialacademy.com/jenatext#";

static {LogCtl.setLog4j();
BasicConfigurator.configure();} 
static Logger log = LoggerFactory.getLogger("Search");

public static void main(String ... argv)
{
    TextQuery.init();
    Dataset ds = createIndexedDataset("tdb", "luceneindex", "hasLongText");
    loadData(ds, "res/data2.ttl");
    queryData(ds);

}

public static Dataset createIndexedDataset(String tdbPath, String lucenePath, String indexedProperty)
{
    Dataset graphDS = null;

    if(tdbPath == null)
    {
        System.out.println("Construct an in-memory dataset");
        graphDS = DatasetFactory.createMem();
    }else
    {
        System.out.println("Construct a persistant TDB based dataset to: " + tdbPath);
        graphDS = DatasetFactory.create();
    }
    //define the index mapping
    EntityDefinition entDef = new EntityDefinition ("uri", "text", ResourceFactory.createProperty(URI, indexedProperty));
    Directory luceneDir = null;

    // check for in memory or file based (persistant) index
    if (lucenePath == null)
    {
        System.out.println("Construct an in-memory lucene index");
        luceneDir = new RAMDirectory();
    }else
    {
        try
        {
            System.out.println("Construct a persistant lucene index to: " + lucenePath);
            luceneDir = new SimpleFSDirectory(Paths.get(lucenePath));
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    //create new indexed dataset: insert operations are automatically indexed with lucene
    Dataset ds = TextDatasetFactory.createLucene(graphDS, luceneDir,  new TextIndexConfig(entDef));
    return ds;
}

public static void loadData(Dataset dataset, String file)
{
    System.out.println("Load data...");
    long startTime = System.currentTimeMillis();
    dataset.begin(ReadWrite.WRITE);
    try
    {
        Model m = dataset.getDefaultModel();
        RDFDataMgr.read(m, file);
        dataset.commit();
    }
    finally
    {
        dataset.end();
    }

    long finishTime = System.currentTimeMillis();
    long time = finishTime - startTime;
    System.out.println("Loading finished after "+ time+ " ms");
}

public static void queryData(Dataset dataset)
{
    System.out.println("Query data...");
    String prefix = "PREFIX ta: <" + URI + ">"+
                                    "PREFIX text: <http://jena.apache.org/text#>";
    String query = "SELECT * WHERE" +
                                    "{ ?s text:query (ta:hasLongText 'g?eat')."+
                                    " ?s ta.hasLongText ?text . "+
                                    "}";

    long startTime = System.currentTimeMillis();

    dataset.begin(ReadWrite.READ);
    try
    {
        Query q = QueryFactory.create(prefix + query);
        QueryExecution qexec = QueryExecutionFactory.create(q,dataset);
        QueryExecUtils.executeQuery(q, qexec);
    }
    finally
    {
        dataset.end();
    }

    long finishTime = System.currentTimeMillis();

    long time = finishTime- startTime;
    System.out.println("Query finished after " + time +" ms.");
}}

May i get some advise?我可以得到一些建议吗? Thank you谢谢

I'd guess you have Lucene version 8.0 or later, which it doesn't look like Jena supports yet.我猜你有 Lucene 8.0 或更高版本,它看起来不像 Jena 支持。 Make sure you are using the correct version of lucene for whatever version of Jena you have: https://jena.apache.org/documentation/query/text-query.html确保为您拥有的任何版本的 Jena 使用正确版本的 lucene: https : //jena.apache.org/documentation/query/text-query.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM