1.simply practice the lucene api for search document and data, post code first
lucene version :2.2.0
set up the index of files
java 代码
- package com.aaron.lucene;
- import java.io.File;
- import java.io.FileReader;
- import java.io.Reader;
- import java.util.Date;
- import org.apache.lucene.analysis.Analyzer;
- 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;
- /**
- * This class demonstrate the process of creating index with Lucene for text
- * files
- */
- public class TxtFileIndexer {
- public static void main(String[] args) throws Exception {
- // indexDir is the directory that hosts Lucene's index files
- File indexDir = new File("C:/bin/lucence/Index");
- // dataDir is the directory that hosts the text files that to be indexed
- File dataDir = new File("C:/bin/lucence/Data");
- Analyzer luceneAnalyzer = new StandardAnalyzer();
- File[] dataFiles = dataDir.listFiles();
- IndexWriter indexWriter = new IndexWriter(indexDir, luceneAnalyzer,
- true);
- long startTime = new Date().getTime();
- for (int i = 0; i < dataFiles.length; i++) {
- if (dataFiles[i].isFile()
- && dataFiles[i].getName().endsWith(".txt")) {
- System.out.println("Indexing file "
- + dataFiles[i].getCanonicalPath());
- Document document = new Document();
- Reader txtReader = new FileReader(dataFiles[i]);
- document.add(new Field("path", dataFiles[i].getPath(),
- Field.Store.YES, Field.Index.UN_TOKENIZED));
- document.add(new Field("contents", txtReader));
- indexWriter.addDocument(document);
- }
- }
- indexWriter.optimize();
- indexWriter.close();
- long endTime = new Date().getTime();
- System.out.println("It takes " + (endTime - startTime)
- + " milliseconds to create index for the files in directory "
- + dataDir.getPath());
- }
- }
Search key word
java 代码
- package com.aaron.lucene;
- import java.io.File;
- import org.apache.lucene.document.Document;
- import org.apache.lucene.index.Term;
- import org.apache.lucene.search.Hits;
- import org.apache.lucene.search.IndexSearcher;
- import org.apache.lucene.search.TermQuery;
- import org.apache.lucene.store.FSDirectory;
- /**
- * This class is used to demonstrate the
- * process of searching on an existing
- * Lucene index
- *
- */
- public class TextFileSearcher {
- public static void main(String[] args) throws Exception {
- String queryStr = "lucene";
- //This is the directory that hosts the Lucene index
- File indexDir = new File("C:/bin/lucence/Index");
- FSDirectory directory = FSDirectory.getDirectory(indexDir);
- IndexSearcher searcher = new IndexSearcher(directory);
- if (!indexDir.exists()) {
- System.out.println("The Lucene index is not exist");
- return;
- }
- Term term = new Term("contents", queryStr.toLowerCase());
- TermQuery luceneQuery = new TermQuery(term);
- Hits hits = searcher.search(luceneQuery);
- for (int i = 0; i < hits.length(); i++) {
- Document document = hits.doc(i);
- System.out.println("File: " + document.get("path"));
- }
- }
- }