Lucene快速开发

Lucene快速开发

1.环境配置

导入jar包

lucene-4.10.4

1.analysis

2.core

3.highlighter

4.queryparser

2.创建索引

2.1创建文档对象

    //创建文档对象
    Document doc = new Document();

    //添加模拟数据
    //添加id
    doc.add(new StringField("id", "11", Store.NO));

    //添加title
    doc.add(new TextField("title", "三分钟学会lucene",Store.YES));

    //添加context
    doc.add(new TextField("content", "倒排索引(也称为倒排文件)是一种存储了来自文本"
        + "中的映射的索引数据结构。比如单词或者数字,对应到它们在数据库、一个文件或"
        + "者一组文件中的位置。它是在文档检索系统中使用的最流行的数据结构,在搜索引擎"
        + "中有大规模使用案例例如我们使用新华字典查询汉字,新华字典有偏旁部首的目录(索引),"
        + "我们查字首先查这个目录,找到这个目录中对应的偏旁部首,就可以通过这个目录中的"
        + "偏旁部首找到这个字所在的位置(文档)。",Store.NO));
真实开发中来自文档,数据库,网页

场景1:搜索word文档

读取文档,将数据变成文档对象,解析成单词,存储索引库,搜索索引库数据,搜索到文档

场景2:查询数据库

把数据变成文档对象,解析成单词,放入索引库

场景3:爬虫爬取网页

解析网页,把网页数据变成文档对象,索引放入库

2.2创建建立索引的对象

//Lucene管理索引存储空间
    FSDirectory directory = FSDirectory.open(new File("E:\\Java\\TEMP"));
    //创建分词器
    Analyzer analyzer = new IKAnalyzer();
    //创建索引库,引入核心配置文件
    IndexWriterConfig writerConfig = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer);
    //创建索引库,引入核心文件
    IndexWriter indexWriter = new IndexWriter(directory, writerConfig);

创建索引库写入对象核心配置对象

参数1:指定使用lucene版本

参数2:指定创建索引库使用分词器

2.3写入索引库,提交,并关闭资源

//写入索引库
    indexWriter.addDocument(doc);
    //提交
    indexWriter.commit();
    //关闭资源
    indexWriter.close();

3.查询索引库

3.1创建查询索引库核心对象

    //指定索引库存储位置
    File file = new File("E:\\Java\\TEMP");
    //读取索引库索引
    DirectoryReader directoryReader = DirectoryReader.open(FSDirectory.open(file));
    //创建查询索引库核心对象
    IndexSearcher searcher = new IndexSearcher(directoryReader);

3.2创建查询解析器,解析查询关键词

    //指定关键词
    String key = new String("三分钟");
    //创建查询解析器,解析查询关键字
    QueryParser queryParser = new QueryParser("title",new IKAnalyzer());
    //对关键词分词
    Query parse = queryParser.parse(key);

QueryParser

参数1:指定查询字段

参数2:使用索引创建时的分词器

3.3使用indexSearcher查询

    //查询
    TopDocs topDocs = searcher.search(parse, 10);
    //获得文档总记录数
    int totalHits = topDocs.totalHits;
    System.out.println("文档总记录数:"+totalHits);
    // 获得文档id,得分数组
    ScoreDoc[] scoreDocs = topDocs.scoreDocs;

返回文档概要信息

TopDocs:文档总记录数,文档id,文档得分

返回得分最高的10条记录

匹配度越高,得分越高

获取查询文档总记录数

获取文档id,文档得分数组

3.4循环数组获得单个文档id,获得文档对象

    //遍历数组
    for (ScoreDoc scoreDoc : scoreDocs) {
        //获得文档id
        int docId = scoreDoc.doc;
        System.out.println("文档ID:"+docId);
        //获得文档得分
        float score = scoreDoc.score;
        System.out.println("文档得分:"+score);
        //根据id查询文档对象
        Document doc = searcher.doc(docId);
        //获得文档对象id
        String id = doc.get("id");
        System.out.println("文档域id:"+id);
        //获得文档对象title
        String title = doc.get("title");
        System.out.println("文档域title:"+title);
        //获得文档对象content
        String content = doc.get("content");
        System.out.println("文档域content:"+content);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值