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:

  1. Add the jar file to Netbeans as an external library by choosing 'Tools' on the menu bar and then selecting 'Library Manager'.
  2. Go to the project. Right click on the project you need to use Lucene for. Select 'Properties'.
  3. In the dialogue box, select 'Libraries' and then select the 'Add Jar/Folder' option.
  4. Navigate to the directory which was created from lucene-[version].tar.gz. Select lucene-core-[version].jar.
  5. Click 'OK' in the dialogue box. The jar file has now been added to your project.