索引创建
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.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;
import java.nio.file.Paths;
@Test
public void indexCreate() throws Exception {
// 创建分词器
Analyzer analyzer = new StandardAnalyzer();
// 创建Directory 流对象
Directory directory = FSDirectory.open(Paths.get("/Users/xiajiandong/Desktop/luceneTest/index"));
IndexWriterConfig config = new IndexWriterConfig(analyzer);
// 创建索引写入对象
IndexWriter indexWriter = new IndexWriter(directory, config);
// 创建Document
Document document = new Document();
document.add(new TextField("id", "1001", Field.Store.YES));
document.add(new TextField("name", "game", Field.Store.YES));
document.add(new TextField("desc", "one world one dream", Field.Store.YES));
// 添加文档 创建索引
indexWriter.addDocument(document);
indexWriter.close();
}
索引删除
删除全部
//删除全部索引
@Test
public void deleteAllIndex() throws Exception {
// 创建分词器
Analyzer analyzer = new StandardAnalyzer();
// 创建Directory 流对象
Directory directory = FSDirectory.open(Paths.get("D:/lucene/index3"));
IndexWriterConfig config = new IndexWriterConfig(analyzer);
// 创建索引写入对象
IndexWriter indexWriter = new IndexWriter(directory, config);
//删除全部索引
indexWriter.deleteAll();
//关闭indexwriter
indexWriter.close();
}
说明:将索引目录的索引信息全部删除,直接彻底删除,无法恢复。
此方法慎用!!
指定查询条件删除
//根据查询条件删除索引
@Test
public void deleteIndexByQuery() throws Exception {
IndexWriter indexWriter = getIndexWriter();
//创建一个查询条件
Query query = new TermQuery(new Term("name", "game"));
//根据查询条件删除
indexWriter.deleteDocuments(query);
//关闭indexwriter
indexWriter.close();
}
索引库修改
原理就是先删除后添加
建议对更新需求采用此方法并且要保证对已存在的索引执行更新,可以先查 询出来,确定更新记录存在执行更新操作。
如果更新索引的目标文档对象不存在,则执行添加
//修改索引库
@Test
public void updateIndex() throws Exception {
IndexWriter indexWriter = getIndexWriter();
//创建一个Document对象
Document document = new Document();
//向document对象中添加域。
//不同的document可以有不同的域,同一个document可以有相同的域。
document.add(new TextField("filename", "要更新的文档", Field.Store.YES));
document.add(new TextField("content", " Lucene 简介 Lucene 是一个基于 Java 的全文信息检索工具包," +"它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。", Field.Store.YES));
indexWriter.updateDocument(new Term("content", "java"), document);
//关闭indexWriter
indexWriter.close();
}