索引创建

  1. import org.apache.lucene.analysis.Analyzer;
  2. import org.apache.lucene.analysis.standard.StandardAnalyzer;
  3. import org.apache.lucene.document.Document;
  4. import org.apache.lucene.document.Field;
  5. import org.apache.lucene.document.TextField;
  6. import org.apache.lucene.index.IndexWriter;
  7. import org.apache.lucene.index.IndexWriterConfig;
  8. import org.apache.lucene.index.Term;
  9. import org.apache.lucene.store.Directory;
  10. import org.apache.lucene.store.FSDirectory;
  11. import org.junit.Test;
  12. import java.nio.file.Paths;
  13. @Test
  14. public void indexCreate() throws Exception {
  15. // 创建分词器
  16. Analyzer analyzer = new StandardAnalyzer();
  17. // 创建Directory 流对象
  18. Directory directory = FSDirectory.open(Paths.get("/Users/xiajiandong/Desktop/luceneTest/index"));
  19. IndexWriterConfig config = new IndexWriterConfig(analyzer);
  20. // 创建索引写入对象
  21. IndexWriter indexWriter = new IndexWriter(directory, config);
  22. // 创建Document
  23. Document document = new Document();
  24. document.add(new TextField("id", "1001", Field.Store.YES));
  25. document.add(new TextField("name", "game", Field.Store.YES));
  26. document.add(new TextField("desc", "one world one dream", Field.Store.YES));
  27. // 添加文档 创建索引
  28. indexWriter.addDocument(document);
  29. indexWriter.close();
  30. }

索引删除

删除全部

//删除全部索引
@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();
}