Luncene简介

Lucene 是 apache 下的一个开放源代码的全文检索引擎工具包,提供了完整的查询引擎和索引引擎

1.实现流程

  • 索引创建过程

    • 将原始内容创建为包含域(Field)的文档(document)
    • 对文档进行分词,组成索引库中最小的单元(term)

2.相关概念

  • Document:用户提供的源是一条条记录,它们可以是文本文件、字符串或者数据库表的一条记录等
  • Field:Document包含的信息域,是数据的每列,可以存储和索引
  • Term:搜索的最小单位,表示文档的一个词语,由词语和这个词语所出现的Field的名称组成
  • 倒排索引:记录每个词条出现在哪些文档,及在文档中的位置,可以根据词条快速定位到包含这个词条的文档及出现的位置
  • 查询索引:搜索的过程,搜索就是用户输入关键字,从索引(index)中进行搜索的过程

基本使用

1.导入依赖

  1. <dependency>
  2. <groupId>org.apache.lucene</groupId>
  3. <artifactId>lucene-core</artifactId>
  4. <version>8.8.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.lucene</groupId>
  8. <artifactId>lucene-analyzers-common</artifactId>
  9. <version>8.8.1</version>
  10. </dependency>

2.索引

  • 创建索引
  1. // 指定索引文件存储的位置
  2. Directory directory = FSDirectory.open(new File("/xxx/xxx").toPath());
  3. // 创建一个用来读取索引的对象 indexReader
  4. IndexReader indexReader = DirectoryReader.open(directory);
  5. // 创建一个用来查询索引的对象 IndexSearcher
  6. IndexSearcher indexSearcher = new IndexSearcher(indexReader);
  7. // 使用term查询:指定查询的域名和关键字
  8. Query query = new TermQuery(new Term("name","特"));
  9. // 第二个参数:最多显示多 少条数据
  10. TopDocs topDocs = indexSearcher.search(query, 100);
  11. // 查询的总数量
  12. System.out.println(topDocs.totalHits);
  13. // 获取命中的文档 存储的是文档的id
  14. ScoreDoc[] scoreDocs = topDocs.scoreDocs;
  15. for (ScoreDoc scoreDoc : scoreDocs) {
  16. // 根据id查询文档
  17. Document document = indexSearcher.doc(scoreDoc.doc);
  18. System.out.println("name:" + document.get("name"));
  19. }
  • 查询索引
  1. // 指定索引文件存储的位置
  2. Directory directory = FSDirectory.open(new File("/xxx/xxx").toPath());
  3. // 配置分词器
  4. IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
  5. // 创建一个用来创建索引的对象
  6. IndexWriter indexWriter = new IndexWriter(directory, config);
  7. // 删除索引
  8. indexWriter.deleteAll();
  9. // 创建Document
  10. Document document = new Document();
  11. document.add(new TextField("name", "特朗普 川建国 米国", Field.Store.YES));
  12. // 添加Document
  13. indexWriter.addDocument(document);
  14. // 关闭资源
  15. indexWriter.close();

更新时间:{docsify-updated}