KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > terracotta > modules > lucene_2_0_0 > LuceneSampleDataIndex


1 package org.terracotta.modules.lucene_2_0_0;
2
3 import java.io.BufferedInputStream JavaDoc;
4 import java.io.File JavaDoc;
5 import java.io.FileInputStream JavaDoc;
6 import java.io.IOException JavaDoc;
7
8 import org.apache.lucene.analysis.Analyzer;
9 import org.apache.lucene.analysis.standard.StandardAnalyzer;
10 import org.apache.lucene.demo.IndexHTML;
11 import org.apache.lucene.document.Document;
12 import org.apache.lucene.document.Field;
13 import org.apache.lucene.index.IndexWriter;
14 import org.apache.lucene.queryParser.ParseException;
15 import org.apache.lucene.queryParser.QueryParser;
16 import org.apache.lucene.search.Hits;
17 import org.apache.lucene.search.IndexSearcher;
18 import org.apache.lucene.search.Query;
19 import org.apache.lucene.search.Searcher;
20 import org.apache.lucene.store.RAMDirectory;
21
22 import com.tc.util.ZipBuilder;
23
24 public final class LuceneSampleDataIndex {
25
26   public static final String JavaDoc FIELD_PATH = "path";
27   public static final String JavaDoc FIELD_SUMMARY = "summary";
28   public static final String JavaDoc FIELD_TITLE = "title";
29   private static final String JavaDoc HTML_DATA = "sample-html-data-1.0.zip";
30   private static final String JavaDoc DATA_DIR = "bible";
31   private final String JavaDoc indexPath;
32   private final RAMDirectory directory;
33
34   public LuceneSampleDataIndex(File JavaDoc workingDir) throws IOException JavaDoc {
35     this.indexPath = workingDir + File.separator + DATA_DIR;
36     if (!new File JavaDoc(indexPath).exists()) {
37       String JavaDoc dataPath = LuceneSampleDataIndex.class.getResource(HTML_DATA).getPath();
38       BufferedInputStream JavaDoc in = new BufferedInputStream JavaDoc(new FileInputStream JavaDoc(dataPath));
39       ZipBuilder.unzip(in, workingDir);
40       String JavaDoc[] args = new String JavaDoc[] { "-create", "-index", indexPath, workingDir.getAbsolutePath() };
41       IndexHTML.main(args);
42     }
43     directory = new RAMDirectory(indexPath);
44   }
45   
46   // This breaks encapsulation and is for tesing purposes only
47
public RAMDirectory publishDirectory() {
48     return directory;
49   }
50
51   public Hits query(String JavaDoc queryString) throws IOException JavaDoc, ParseException {
52     synchronized (directory) {
53       Searcher searcher = new IndexSearcher(directory);
54       Analyzer analyzer = new StandardAnalyzer();
55       QueryParser parser = new QueryParser("contents", analyzer);
56       Query query = parser.parse(queryString);
57       return searcher.search(query);
58     }
59   }
60
61   public void put(String JavaDoc field, String JavaDoc value) throws Exception JavaDoc {
62     Document doc = new Document();
63     doc.add(new Field(field, value, Field.Store.YES, Field.Index.TOKENIZED));
64     synchronized (directory) {
65       final IndexWriter writer = new IndexWriter(directory, new StandardAnalyzer(), (directory.list().length == 0));
66       writer.addDocument(doc);
67       writer.close();
68       writer.optimize();
69     }
70   }
71 }
72
Popular Tags