Lucene的学习第六篇——入门代码再学习

到这步应该明白以下几个问题
 lucene实现全文检索的流程
 文档对象里面封装的域信息,几种子类域(查文档会用)
 分词是为什么,怎么分,什么是语汇单元,
 索引是怎么创建的,索引与语汇单元,与文档对象之间的关系,
 能成功运行入门代码,能明白入门代码实现了的功能。
这篇主要回顾入门代码,介绍代码。提出需求问题。进一步实现场景一。

创建索引:


/**
     * 创建IndexWriter(创建索引准备工作)
     */
    private IndexWriter createIndexWriter(String indexRepositoryPath) throws Exception {
        // 创建Directory对象
        Directory dir = FSDirectory.open(new File(indexRepositoryPath));
        // 索引库还可以存放到内存中
        // Directory directory = new RAMDirectory();
        // 创建一个标准分析器
        Analyzer analyzer = new StandardAnalyzer();
        // 创建IndexWriterConfig对象
        // 参数1: Lucene的版本信息
        // 参数2: 分析器对象
        IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);
        // 创建IndexWriter对象
        return new IndexWriter(dir, config);
    } 

public void testCreateIndex() throws Exception {
        // 第一步:创建IndexWriter(索引存放的位置)
// 类似IO中的写,将索引写进指定目录下
        IndexWriter indexWriter = createIndexWriter("G:\\a\\v");
        // 第二步:开始创建索引
        // 采集原始数据(从指定的目录下取得文件对象列表集合)
        File f = new File("G:\\a\\新建文件夹");
        // 遍历文件对象列表
for (File file : f.listFiles()) {
            //为每一个文档创建文档对象
            Document document = new  Document();
            // 文件名称
            String file_name = file.getName();
// 文件大小
            long file_size = FileUtils.sizeOf(file);
            // 文件路径
            String file_path = file.getPath();
// 文件内容
            String file_content = FileUtils.readFileToString(file);


//将以上的文档信息,封装到域中
// 第一个域,名字,fileName,查看子类域表(域的再学习),索引,分词都已经实现,
//是否储存,指定为储存
Field fileNameField = new TextField("fileName", file_name, Store.YES);
//第二个域:名字,fileSize,使用的是LongField域,查表看默认实现了什么,我们指定为储存,
            Field fileSizeField = new LongField("fileSize", file_size, Store.YES);
    //第三个域,存放的是 filepath,路径存放的内容,没有分词,没有索引,储存了。     
            Field filePathField = new StoredField("filePath", file_path);
        //第四域。存放的是:内容,分词,索引了,但是我们没有储存,(使用的是No。) 
            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();    

    }
运行成功:即创建索引成功

查询,就没有说的了,查询就是去读索引库,然后根据索引找到语汇单元,找到文档

TermQuery query = new TermQuery(new Term("filename", "spring.txt"));
        //执行查询(参数1:查询条件对象,参数2:查询结果返回的最大值)
        TopDocs topDocs = searcher.search(query, 10); 

上面两个代码就是执行查询的操作,第二句代码,返回的10,意思就是返回默认排序的前10个。
引出两个问题:
1:是怎么排序的?
2:我们只是能够搜索这个spring.txt文档,怎么实现搜索“全文”,搜索到“全文检索.txt

返回lucene/slor文章的目录:http://blog.csdn.net/m15517986455/article/details/78986856
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值