10 Lucene:02.lucene入门案例

10 Lucene:02.lucene入门案例

08.入门程序-工程搭建、09.入门程序-创建索引库、10.使用luke查看索引库的内容、11.入门程序-查询索引库

Lucene的官网下载 点击Download

本例程使用:lucene-7.4.0.zip

运行环境要求jdk1.9版本或以上

开发工具:IntelliJ IDEA 2019.2.2


本入门案例用到的jar包:

commons-io-2.6.jar

lucene-core-7.4.0.jar

lucene-analyzers-common-7.4.0.jar

 一、Lucene测试环境搭建

 创建一个空工程Project

 添加自定义模块Modules

new 一个Directory文件夹名称为lib

 手工添加jar包的依赖Depedency到Module


09.入门程序-创建索引库

  创建索引代码如下,读取的文件目录位置是

  C:\FFOutput\searchsource

package cn.bjut;

import org.apache.commons.io.FileUtils;
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.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;

import java.io.File;
import java.nio.file.Path;

public class LuceneFirst{
    @Test
    public void createIndex() throws Exception{
        //1、创建一个Director对象,指定索引库保存的位置。
        //把索引库保存在磁盘上
        Path path = new File("C:\\FFOutput\\index").toPath();
        Directory directory = FSDirectory.open(path);
        //2、基于Directory对象创建一个IndexWriter对象
        IndexWriter indexWriter =new IndexWriter(directory,new IndexWriterConfig());
        //3、读取磁盘上的文件,对应每个文件创建一个文档对象
        File dir= new File("C:\\FFOutput\\searchsource");
        File[] files =dir.listFiles();
        for (File file:files
             ) {
            //取文件名
            String fileName =file.getName();
            //文件路径
            String filePath =file.getPath();
            //文件的内容commons-io工具类
            String fileContent= FileUtils.readFileToString(file,"utf-8");
            //文件的大小
            long fileSize = FileUtils.sizeOf(file);
            //创建Field
            //参数1:域的名称;参数2:域的内容;参数3:是否存储
            Field fieldName = new TextField("name",fileName,Field.Store.YES);
            Field fieldPath = new TextField("path",filePath,Field.Store.YES);
            Field fieldContent = new TextField("content",fileContent,Field.Store.YES);
            Field fieldSize = new TextField("size",fileSize +"",Field.Store.YES);
            //4、创建文档对象
            Document document = new Document();
            //向文档对象中添加域
            document.add(fieldName);
            document.add(fieldPath);
            document.add(fieldContent);
            document.add(fieldSize);
            //5、把文档对象写入索引库
            indexWriter.addDocument(document);

        }
            //6、关闭indexWriter对象
        indexWriter.close();

    }

}

 本地磁盘上指定目录下被创建的Lucene索引

 

 10.使用luke查看索引库的内容

luke-javafx-7.4.0-luke-release.zip

需要jdk1.9版本或以上,此处使用的是jdk11.0.4

11.入门程序-查询索引库

在上面的LuceneFirst类的里面继续添加如下代码:

    @Test
    public void searchIndex() throws Exception {
        //1、创建一个Director对象,指定索引库的位置
        Directory directory = FSDirectory.open(new File("C:\\FFOutput\\index").toPath());
        //2、创建一个IndexReader对象
        IndexReader indexReader = DirectoryReader.open(directory);
        //3、创建一个indexSearcher对象,构造方法中的参数indexReader对象
        IndexSearcher indexSearcher =new IndexSearcher(indexReader);
        //4、创建一个Query对象,使用其中的TermQuery
        Query query = new TermQuery(new Term("content","spring"));

        //5、执行查询,得到一个TopDocs对象
        //参数1:查询对象 参数2:查询结果返回的最大记录数
        TopDocs topDocs = indexSearcher.search(query,10);
        //6、取查询结果的总记录数
        System.out.println("查询总记录数:" + topDocs.totalHits);
        //7、取文档列表
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        //8、打印文档中的内容
        for (ScoreDoc doc:
             scoreDocs) {
            //取文档ID
            int docId = doc.doc;
            //根据ID取文档对象
            Document document = indexSearcher.doc(docId);

            System.out.println(document.get("name"));
            System.out.println(document.get("path"));
            System.out.println(document.get("size"));
            //System.out.println(document.get("content"));
            System.out.println("---------------------");
        }
        //9、关闭IndexReader对象
        indexReader.close();
    }

控制台会打印输出结果。

=====================================

10 Lucene:01.全文检索基本介绍

end

发布了95 篇原创文章 · 获赞 20 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_40993412/article/details/101457459
今日推荐