2012-10-16 5 views
5

Edit: Ich fand die Lösung: Bearbeiten Sie die core.jar, löschen Sie alle Pakete außer dem Codec-Paket und fügen Sie den Build-Pfad, das Codec-Paket muss in Jar sein, kann nicht Quellcode sein Ich kann nicht verstehen, das ist sehr einfacher Code für Lucene, es läuft mit Lucene Core-Lib, aber Fehler verursachen, wenn ich Lucene Kernquelle verwenden.Fehler einfaches Beispiel Lucene 4.0 mit Quelle (nicht jar lib)

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(); 
} 

Der Fehler ist:

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 
+0

See: http://stackoverflow.com/questions/9474625/how-to-debug-solr-test-cases-in-eclipse – kenorb

+0

Ich habe ähnlicher Fehler bei der Verwendung von Luke, um den von Lucene42 erzeugten solr-Index zu öffnen. – kenorb

Antwort

0

Sie haben die Lucene jar zum Classpath hinzufügen.

Wenn dies nicht funktioniert, kopieren Sie jar in Ihr Indexverzeichnis, z.

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

Einige der Gläser in der entpackten Web-App für den Krieg nach Maß, und nicht ihr eigenes MANIFESTEN Verzeichnis haben. Das Luke-Glas hat den Code und ist ein eigenständiges Glas.

Siehe auch:

How Do I Execute CheckIndex In LWE2.1