zoukankan      html  css  js  c++  java
  • Lucene全文检索的使用

    1. 流程主要就是构建索引库然后搜索索引库

    lucene-analyzers-common-7.4.0.jar
    lucene-core-7.4.0.jar
    lucene-queryparser-7.4.0.jar

    2.  构建索引库

    1、创建一个Director对象,指定索引库保存的位置
    2、基于Directory对象创建一个IndexWriter对象
    3、读取磁盘上的文件,对应每个文件创建一个文档对象
    4、向文档对象中添加域
    5、把文档对象写入索引库
    6、关闭indexwriter对象
         //1、创建一个Director对象,指定索引库保存的位置。
            //把索引库保存在磁盘
            Directory directory = FSDirectory.open(new File("E:\lucene\index").toPath());
            //2、基于Directory对象创建一个IndexWriter对象
            IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig());
            //3、读取磁盘上的文件,对应每个文件创建一个文档对象。
            File dir = new File("E:\lucene\searchsource");
            File[] files = dir.listFiles();
            for (File f :
                    files) {
                //取文件名
                String fileName = f.getName();
                //文件的路径
                String filePath = f.getPath();
                //文件的内容
                String fileContent = FileUtils.readFileToString(f, "utf-8");
                //文件的大小
                long fileSize = FileUtils.sizeOf(f);
                //创建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);
                //创建文档对象
                Document document = new Document();
                //4、向文档对象中添加域
                document.add(fieldName);
                document.add(fieldPath);
                document.add(fieldContent);
                document.add(fieldSize);
                //5、把文档对象写入索引库
                indexWriter.addDocument(document);
            }
            //6、关闭indexwriter对象
            indexWriter.close();

    3. 搜索索引库

    1、创建一个Director对象,指定索引库的位置
    2、创建一个IndexReader对象
    3、创建一个IndexSearcher对象,构造方法中的参数indexReader对象
    4、创建一个Query对象,TermQuery
    5、执行查询,得到一个TopDocs对象
    6、取查询结果的总记录数
    7、取文档列表
    8、打印文档中的内容
    9、关闭IndexReader对象
         //1、创建一个Director对象,指定索引库的位置
            Directory directory = FSDirectory.open(new File("E:\lucene\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", "lucene"));
            //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();
  • 相关阅读:
    【翻译】Ext JS最新技巧——2014-9-10
    Ext JS 5的声明式事件监听
    SpringBoot启动方式讲解和部署war项目到tomcat9
    异常处理
    SpringBoot2.x个性化启动banner设置和debug日志
    实用博客
    SpringBootTest单元测试实战、SpringBoot测试进阶高级篇之MockMvc讲解
    SpringBoot注解把配置文件自动映射到属性和实体类实战
    SpringBoot2.x配置文件讲解
    SpringBoot2.x使用Dev-tool热部署
  • 原文地址:https://www.cnblogs.com/chenxi-mxj/p/12145463.html
Copyright © 2011-2022 走看看