• lucene 基础知识点


    部分知识点的梳理,参考<lucene实战>及网络资料

    1、基本概念

    lucence 可以认为分为两大组件:
    1)索引组件
      a、内容获取:即将原始的内容材料,可以是数据库、网站(爬虫)、文本转换为lucence的Docment
      Docment 为若干个带值得域
      b、文档分析:利用分词器对文档进行分析;
      c、建立索引:根据文档分析的结构建立索引文件;
    2)搜索组件
      a、建立查询:即将用户请求转换为搜索引擎支持的查询对象格式;
      b、执行搜索查询;并反馈Document结果集;

    2、官方样例代码分析

    **索引组件部分工作
    1)创建一个包含某个分词器的IndexWriter
      private IndexWriter writer;
      writer = new IndexWriter(IndexDir, new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);

    2)遍历被索引的文件(即原始内容)将其转换为Document
      Docment doc = new Docment();
      doc.add(new Field("contents", new FileReader(f));
      doc.add(new Field("filename"), f.getName(), Field.Store.Yes, Field.Index.NOT_ANALYZED);

    3)针对该Docment创建索引
      writer.addDocment(doc);

    **搜索组件部分工作
    1)打开索引文件
      IndexSearcher is = new IndexSearcher(IndexDir);

    2)创建一个查询对象
      QueryParser parser = new QueryParser(Version.LUCENE_30, "contents", new StandardAnalyzer());
      Query query = parser("要找的查询关键字");

    3)执行查询并返回结果
      TopDocs hits = is.search(query, 10);

    3、lucene的核心类

      1、IndexWriter :提供对索引文件的写入操作;
      2、Directory: 抽象类,索引的存放位置
      3、Analyzer: 分词器,由IndexWriter的构造函数指定
      //IK 中文分词
      Analyzer analyzer = new IKAnalyzer();
      4、Document: 虚拟文件,由一些Field的集合;
      5、Field: 域,lucene实际搜索值的地方

      6、IndexSearcher:搜索由IndexWriter创建的索引;
      7、Term:搜索的基本单元,与Field类似
      8、Query:查询子类
      //多字段查询
      String [] stringQuery={"内容1","内容2"};
      String[] fields={"content","title"};
      Occur[] occ={Occur.SHOULD,Occur.SHOULD};
      Query query = MultiFieldQueryParser.parse(stringQuery, fields, occ, analyzer);
      9、TopDocs: 指针容器,指向结果集中的文档

  • 相关阅读:
    MySQL锁概述
    MYSQL删除重复记录
    SPRING事务控制
    性能测试中如何确定并发用户数
    Jsoup操作
    linux根据端口号查询进程
    linux下解压jar文件
    开发阶段的logback.xml
    栈--getMin(leetcode 155)
    git "fatal: The remote end hung up unexpectedly"
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/5919967.html
Copyright © 2020-2023  润新知