Lucene in Action is based on the 1.4.x release of Lucene, which is
quite old by now and unfortunately some of the APIs have since been
removed.
We are working on the 2nd edition to fix this, but in the mean-time
you need to migrate to the new APIs when you see the errors.
Eg, if you look in the 1.9 javadocs for Field, it will tell you what
new API to use instead of Field.Keyword, Field.Text, etc:
http://lucene.apache.org/java/1_9_1/api/org/apache/lucene/document/Field.html
Mike
Oleg Oltar wrote:
Hi!
I am starting to learn Lucene.
I am using Lucene in Action book for startup (It was recommended to
me). I
tried to compile first example from that book, but my ide (I use
eclipse,
shows there are some errors in my code). I am just the beginner
here, and I
really need to compile at least few programs.... before I can solve
problems
myself. So I decided to post here the whole code with my comments.
Please
help me!!!
package org.main;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
public class SimpleIndexer {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
if (args.length !=2){
throw new Exception("Usage: java" + SimpleIndexer.class.getName() +
"<indexDir>
<dataDir>");
}
File indexDir = new File(args[0]);
File dataDir = new File(args[1]);
long start = new Date().getTime();
int numIndexed = index(indexDir, dataDir);
long end = new Date().getTime();
System.out.println("Indexing " + numIndexed +" took " + (end -
start) +
"milliseconds");
}
@SuppressWarnings("deprecation")
public static int index(File indexDir, File dataDir) throws
IOException {
if (!dataDir.exists() || !dataDir.isDirectory()){
throw new IOException(dataDir + " doesn't exist or not a directory");
}
IndexWriter writer = new IndexWriter(indexDir, new
StandardAnalyzer(), true);
// Not sure why eclipse crosses this
writer.setUseCompoundFile(false);
indexDirectory(writer, dataDir);
int numIndexed = writer.docCount(); // Not sure why eclipse crosses
this
writer.optimize();
writer.close();
return numIndexed;
}
private static void indexDirectory(IndexWriter writer, File dir)
throwsIOException{
File[] files = dir.listFiles();
for (int i=0; i< files.length; i++){
File f = files[i];
if(f.isDirectory()){
indexDirectory(writer, f);
} else if(f.getName().endsWith(".txt")){
indexFile(writer, f);
}
}
}
private static void indexFile(IndexWriter writer, File f)
throwsIOException{
if(f.isHidden() || !f.exists() || !f.canRead()){
return;
}
System.out.println("Indexing " + f.getCanonicalPath());
Document doc = new Document();
doc.add(Field.Text("contents", new FileReader(f))); // Eclipse says:
The
method Text(String, FileReader) is undefined for the type Field
doc.add(Field.Keyword("filename", f.getCanonicalPath())); // Eclipse
says:The
method Keyword(String, String) is undefined for the type Field
writer.addDocument(doc);
}
}
Please explain me why these errors are shown, and how to fix them.
Maybe,
the version of lucene used by author of the book, contained needed
methods?
So may it be that the book is outdated and can't be used for
learning. If
so, please recommend me something that can help me to start with
lucene.
Thanks in advance,
Oleg
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org