Error simple example lucene 4.0 with source (not j

2020-07-14 09:32发布

Edit: I found the solution: edit the core.jar, delete all package except the codec package and add to the build path, the codec package must be in jar, can't be source code I can't understand, this is very simple code for Lucene, it run with Lucene core lib, but cause error when I use Lucene core source.

public static void main(String[] args) throws IOException, ParseException {
    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);

    // Store the index in memory:
    Directory directory = new RAMDirectory();
    // To store an index on disk, use this instead:
    // Directory directory = FSDirectory.open("/tmp/testindex");
    IndexWriterConfig config = new IndexWriterConfig(
            Version.LUCENE_CURRENT, analyzer);
    IndexWriter iwriter = new IndexWriter(directory, config);
    Document doc = new Document();
    String text = "This is the text to be indexed.";
    doc.add(new Field("fieldname", text, TextField.TYPE_STORED));
    iwriter.addDocument(doc);
    iwriter.close();

    // Now search the index:
    DirectoryReader ireader = DirectoryReader.open(directory);
    IndexSearcher isearcher = new IndexSearcher(ireader);
    // Parse a simple query that searches for "text":
    QueryParser parser = new QueryParser(Version.LUCENE_CURRENT,
            "fieldname", analyzer);
    Query query = parser.parse("text");
    ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;
    // Iterate through the results:
    for (int i = 0; i < hits.length; i++) {
        Document hitDoc = isearcher.doc(hits[i].doc);
                System.out.println(hitDoc.get("fieldname"));
    }
    ireader.close();
    directory.close();
}

The error is:

 Exception in thread "main" java.lang.ExceptionInInitializerError
        at org.apache.lucene.index.LiveIndexWriterConfig.<init>(LiveIndexWriterConfig.java:118)
        at org.apache.lucene.index.IndexWriterConfig.<init>(IndexWriterConfig.java:145)
        at Test.main(Test.java:34)
    Caused by: java.lang.IllegalArgumentException: A SPI class of type org.apache.lucene.codecs.Codec with name 'Lucene40' does not exist. You need to add the corresponding JAR file supporting this SPI to your classpath.The current classpath supports the following names: []
        at org.apache.lucene.util.NamedSPILoader.lookup(NamedSPILoader.java:104)
        at org.apache.lucene.codecs.Codec.forName(Codec.java:95)
        at org.apache.lucene.codecs.Codec.<clinit>(Codec.java:122)
        ... 3 more

标签: java lucene
1条回答
The star\"
2楼-- · 2020-07-14 10:28

You have to add the Lucene jar to the classpath.

If this doesn't work, copy jar into your index directory, e.g.

java -cp app/luke/lukeall-4.0-dev.jar org.apache.lucene.index.CheckIndex data/solr/cores/collection1_0/data/index/

Some of the jars in the unpacked web app are custom-made for the war, and do not have their own MANIFEST directory. The Luke jar has the code and is a standalone jar.

See also:

How Do I Execute CheckIndex In LWE2.1

查看更多
登录 后发表回答