使用lucene3.5
package com.yj.LunceneTest;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.NumericField;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.StaleReaderException;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
public class IndexTest {
/**
* 创建索引
* @throws IOException
* @throws LockObtainFailedException
* @throws CorruptIndexException
*/
@Test
public void writeIndex() throws CorruptIndexException, LockObtainFailedException, IOException {
Directory directory = FSDirectory.open(new File("D:/dev_data/lucene_data/index01"));
IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35)));
writer.deleteAll();
Document doc = new Document();
doc.add(new Field("id","1",Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("name","张三",Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("content","文本内容荣",Field.Store.NO,Field.Index.ANALYZED));
writer.addDocument(doc);
doc = new Document();
doc.add(new Field("id","2",Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("name","李四",Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("content","文本内容荣李四",Field.Store.NO,Field.Index.ANALYZED));
writer.addDocument(doc);
writer.close();
}
/**
* 查询
* @throws IOException
*/
@Test
public void search01() throws IOException {
Directory directory = FSDirectory.open(new File("D:/dev_data/lucene_data/index01"));
IndexReader reader = IndexReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
TermQuery query = new TermQuery(new Term("name","张三"));
TopDocs tds = searcher.search(query, 10);
for(ScoreDoc sd:tds.scoreDocs) {
Document doc = searcher.doc(sd.doc);
System.out.println(doc.get("id")+","+doc.get("name"));
}
reader.close();
}
/**
* 删除索引
* @throws IOException
* @throws LockObtainFailedException
* @throws CorruptIndexException
*/
@Test
public void delete() throws CorruptIndexException, LockObtainFailedException, IOException {
IndexWriter writer = null;
Directory directory = FSDirectory.open(new File("D:/dev_data/lucene_data/index01"));
writer = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)));
//参数是一个选项,可以是一个Query,也可以是一个term,term是一个精确查找的值
//此时删除的文档并不会被完全删除,而是存储在一个回收站中的,可以恢复
writer.deleteDocuments(new Term("id","1"));
writer.commit();
}
/**
* 更新索引
* @throws IOException
* @throws LockObtainFailedException
* @throws CorruptIndexException
*/
@Test
public void update() throws CorruptIndexException, LockObtainFailedException, IOException {
Directory directory = FSDirectory.open(new File("D:/dev_data/lucene_data/index01"));
IndexWriter writer = new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)));
Document doc = new Document();
doc.add(new Field("id","11",Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("content","更新内容",Field.Store.NO,Field.Index.ANALYZED));
writer.updateDocument(new Term("id","1"), doc);
writer.close();
}
}