Luncene简介
Lucene 是 apache 下的一个开放源代码的全文检索引擎工具包,提供了完整的查询引擎和索引引擎
1.实现流程
索引创建过程
- 将原始内容创建为包含域(Field)的文档(document)
- 对文档进行分词,组成索引库中最小的单元(term)
2.相关概念
- Document:用户提供的源是一条条记录,它们可以是文本文件、字符串或者数据库表的一条记录等
- Field:Document包含的信息域,是数据的每列,可以存储和索引
- Term:搜索的最小单位,表示文档的一个词语,由词语和这个词语所出现的Field的名称组成
- 倒排索引:记录每个词条出现在哪些文档,及在文档中的位置,可以根据词条快速定位到包含这个词条的文档及出现的位置
- 查询索引:搜索的过程,搜索就是用户输入关键字,从索引(index)中进行搜索的过程
基本使用
1.导入依赖
<dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId><version>8.8.1</version></dependency><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-analyzers-common</artifactId><version>8.8.1</version></dependency>
2.索引
- 创建索引
// 指定索引文件存储的位置Directory directory = FSDirectory.open(new File("/xxx/xxx").toPath());// 创建一个用来读取索引的对象 indexReaderIndexReader indexReader = DirectoryReader.open(directory);// 创建一个用来查询索引的对象 IndexSearcherIndexSearcher indexSearcher = new IndexSearcher(indexReader);// 使用term查询:指定查询的域名和关键字Query query = new TermQuery(new Term("name","特"));// 第二个参数:最多显示多 少条数据TopDocs topDocs = indexSearcher.search(query, 100);// 查询的总数量System.out.println(topDocs.totalHits);// 获取命中的文档 存储的是文档的idScoreDoc[] scoreDocs = topDocs.scoreDocs;for (ScoreDoc scoreDoc : scoreDocs) {// 根据id查询文档Document document = indexSearcher.doc(scoreDoc.doc);System.out.println("name:" + document.get("name"));}
- 查询索引
// 指定索引文件存储的位置Directory directory = FSDirectory.open(new File("/xxx/xxx").toPath());// 配置分词器IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());// 创建一个用来创建索引的对象IndexWriter indexWriter = new IndexWriter(directory, config);// 删除索引indexWriter.deleteAll();// 创建DocumentDocument document = new Document();document.add(new TextField("name", "特朗普 川建国 米国", Field.Store.YES));// 添加DocumentindexWriter.addDocument(document);// 关闭资源indexWriter.close();
更新时间:{docsify-updated}
