Lucene in 5 Minutes
Lucene makes it easy to add full-text search capability to your application. In fact, its so easy, I'm going to show you how in 5 minutes!
1. Index
For this simple case, we're going to create an in-memory index from some strings.
Directory index = new RAMDirectory(); IndexWriter w = new IndexWriter(index, new StandardAnalyzer(), true); addDoc(w, "Lucene in Action"); addDoc(w, "Lucene for Dummies"); addDoc(w, "Managing Gigabytes"); addDoc(w, "The Art of Computer Science"); w.close();
addDoc() takes a string and adds it to the index:
private static void addDoc(IndexWriter w, String value) throws IOException {
Document doc = new Document();
doc.add(new Field("title", value, Field.Store.YES, Field.Index.TOKENIZED));
w.addDocument(doc);
}
2. Query
We read the query from stdin, parse it and build a lucene Query out of it.
String querystr = args.length > 0 ? args[0] : "lucene";
Query q = new QueryParser("title", new StandardAnalyzer()).parse(querystr);
3. Search
Using the Query we create a Searcher to search the index, obtaining Hits from our search query.
IndexSearcher s = new IndexSearcher(index); Hits hits = s.search(q);
4. Display
Now that we have results from our search, we display the results to the user.
System.out.println("Found " + hits.length() + " hits.");
for(int i=0;i<hits.length();++i) {
System.out.println((i + 1) + ". " + hits.doc(i).get("title"));
}
Here's the app in its entirety. Download HelloLucene.java
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; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory; import java.io.IOException; public class HelloLucene { public static void main(String[] args) throws IOException, ParseException { // 1. create the index Directory index = new RAMDirectory(); IndexWriter w = new IndexWriter(index, new StandardAnalyzer(), true); addDoc(w, "Lucene in Action"); addDoc(w, "Lucene for Dummies"); addDoc(w, "Managing Gigabytes"); addDoc(w, "The Art of Computer Science"); w.close(); // 2. query String querystr = args.length > 0 ? args[0] : "lucene"; Query q = new QueryParser("title", new StandardAnalyzer()).parse(querystr); // 3. search IndexSearcher s = new IndexSearcher(index); Hits hits = s.search(q); // 4. display results System.out.println("Found " + hits.length() + " hits."); for(int i=0;i<hits.length();++i) { System.out.println((i + 1) + ". " + hits.doc(i).get("title")); } s.close(); } private static void addDoc(IndexWriter w, String value) throws IOException { Document doc = new Document(); doc.add(new Field("title", value, Field.Store.YES, Field.Index.TOKENIZED)); w.addDocument(doc); } }
To use this app from the command line, type java HelloLucene <query>
Installing Lucene
PS: Its come to my attention that some visitors have difficulty installing Lucene in the first place.
You should first download Lucene and extract it to a directory you use for java or programming.If you're using Netbeans you can either:
- Follow the directions here
- Use these steps:
- Add the jar file to Netbeans as an external library by choosing 'Tools' on the menu bar and then selecting 'Library Manager'.
- Go to the project. Right click on the project you need to use Lucene for. Select 'Properties'.
- In the dialogue box, select 'Libraries' and then select the 'Add Jar/Folder' option.
- Navigate to the directory which was created from lucene-[version].tar.gz. Select lucene-core-[version].jar.
- Click 'OK' in the dialogue box. The jar file has now been added to your project.