Lucene的学习第三篇——入门代码

上一节只介绍了Lucene的整体流程。和构建文档对象。至于分词时怎么分的?查询是怎么查的?如何与域联系起来…等更多细节和底层原理。后续介绍,因为更抽象,难懂。等到代码学习之后, 再看,容易一些。
为了简单操作和方便易懂,继续使用场景一作为案例:(以下代码,先运行成功。后面会逐步讲解)
需求:
通过关键字搜索文件,凡是文件名或文件内容包括关键字的文件都需要找出来:下图(是一堆文件列表)
这里写图片描述

本人使用:
版本与环境:
lucene4.10.3
Jdk:1.7(Jdk要求:1.7以上)
IDE:Eclipse

建工程,导包(前面说过Lucene就是一堆jar包):
这里写图片描述

代码:
步骤一:创建索引

@Test
    public void run() throws IOException{
        //索引库存放的位置
        Directory directory = FSDirectory.open(new File("G:\\a\\v"));
        Analyzer analyzer=new StandardAnalyzer();//标准的分词器

        IndexWriterConfig  config=new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer);
        IndexWriter indexWriter = new IndexWriter(directory, config);

        //创建field域
        File f = new File("G:\\a\\新建文件夹");
// listFiles 就是那一堆要搜索的文件
        File[] listFiles = f.listFiles();
        for (File file : listFiles) {
            //创建文档对象
            Document document = new  Document();
            // 文件名称
            String file_name = file.getName();
            Field fileNameField = new TextField("fileName", file_name, Store.YES);
            // 文件大小
            long file_size = FileUtils.sizeOf(file);
            Field fileSizeField = new LongField("fileSize", file_size, Store.YES);
            // 文件路径
            String file_path = file.getPath();
            Field filePathField = new StoredField("filePath", file_path);
            // 文件内容
            String file_content = FileUtils.readFileToString(file);
            Field fileContentField = new TextField("fileContent", file_content, Store.NO);

            document.add(fileNameField);
            document.add(fileSizeField);
            document.add(filePathField);
            document.add(fileContentField);

            //扔进索引库
            indexWriter.addDocument(document);
        }
    indexWriter.close();    

    }

//=========================================================================运行程序后:

这里写图片描述

那么则说明创建索引成功:整个程序就是实现了创建索引

//==========================================

步骤二:查询索引
// 查询索引

    @Test
    public void testSearchIndex() throws Exception {
        // 第一步:查询准备工作
        // 创建Directory对象
        Directory dir = FSDirectory.open(new File("G:\\a\\v"));
        // 创建IndexReader对象
        IndexReader reader = DirectoryReader.open(dir);
        // 创建IndexSearcher对象
        IndexSearcher searcher = new IndexSearcher(reader);
        // 第二步:创建查询条件对象
        TermQuery query = new TermQuery(new Term("fileName", "spring.txt"));
        // 第三步:执行查询(参数1:查询条件对象,参数2:查询结果返回的最大值)
        TopDocs topDocs = searcher.search(query, 10); 
        // 第四步:处理查询结果
        // 输出结果数量
        System.out.println("查询的结果数量:" + topDocs.totalHits);
        // 取得结果集
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        // 遍历结果集
        for (ScoreDoc scoreDoc : scoreDocs) {
            // 根据文档对象ID取得文档对象
            Document doc = searcher.doc(scoreDoc.doc);
            // 打印搜索结果内容
            // 文件名称
            System.out.println("文件名称:" + doc.get("fileName"));
            // 文件路径
            System.out.println("文件路径:" + doc.get("filePath"));
            // 文件大小
            System.out.println("文件大小:" + doc.get("fileSize"));
        }
        // 关闭IndexReader对象
        reader.close();
    }

运行结果:
这里写图片描述

通过以上的两段代码我们实现了创建索引与查询索引。
第一段代码做了这么几个事:
将我们要查询的每个文档,构建了了文档对象。文档对象里面存放的就是该文档的信息。(文件名,大小,内容,路径等)
将该文档对象扔进索引库(自动创建了索引)
索引库存放在G:\a\v 目录下

第二段代码:
就是到索引库的目录下 找fileName 为:spring.txt的文档。然后输出了该文档的信息。

返回lucene/slor文章的目录:http://blog.csdn.net/m15517986455/article/details/78986856

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值