chapter01_初识Lucene

  1. Lucene 的核心 JAR 包很小只有1MB左右,并且不需要任何第三方依赖

  2. 随着信息量的增大,靠层次分类、多层目录的方法来搜索满足不了需求了,所以需要搜索引擎

    例如 google、mac os的finder

  3. 信息检索(IR,Information Retrieval)

  4. 搜索程序的典型组件

     Users ---> Search User Interface ---> **Build Query** ---> **Run Query** <---> **Index** <--- **Index Document** <--- **Analyze Document** <--- Build Document <--- Acquire Content <--- Raw Content
    
     标**的部分可以由Lucene完成
    
  5. 索引组件

    1. 索引操作整体目标

       文本内容 ----索引操作---> 索引
      

      索引是可以被快速检索的东西

    2. 获取内容 Acquire Content

      通过种种方式(组织好的数据库、网络爬虫爬web站点、本地xml文件等),获取内容

      内容获取模块在访问规模较大的内容集时,重要的是能够以增量方式运行;并且是active的,是持续运行的后台服务

    3. 建立文档 Build Document

      文档主要包括几个带值的域

      示例

       title=Lipitor, Thief of Memory
       isbn=9781424301621
       author=Duane Graveline,Kilmer S. McCully,Jay S. Cohen
       subject=cholesterol,statin,lipitor
       pubmonth=200611
       url=http://www.amazon.com/Lipitor-Thief-Memory-Duane-Graveline/dp/1424301629
      

      文本文件好办,二进制文件需要文档过滤器先过滤

    4. 文档分析 Analyze Document

      目标:

       文档 ----文档分析---> 语汇单元
      

      语汇单元:类似于语言中的单词

    5. 文档索引 Index Document

      目标:将文档加入索引列表

  6. 搜索组件

    1. 搜索质量的衡量标准

      查准率:衡量搜索系统过滤非相关文档的能力

      查全率:衡量搜索系统查找相关文档的能力

    2. 用户搜索界面 UI

    3. 建立查询 Build Query

      查询语句可以包含布尔运算、短语查询、通配符查询

    4. 搜索查询 Search Query

      常见的搜索理论模型有3种

      (1) 纯布尔模型

      (2) 向量空间模型

      (3) 概率模型

      Lucene采用(1)和(2)

    5. 展现结果 Render Result

  7. 搜索程序的其他模块

    1. 管理界面

      跟踪程序运行情况、配置程序的各种组件、启动和停止搜索服务等

    2. 分析界面

      各类查询请求的运行频率、搜索期间发生的故障等

    3. 搜索范围

      多机分布式问题

      搜索范围有两种界定方式:

      (1) 净处理内容

      将数据分割成各个小部分,前端服务器将查询请求发到各台机器分别查询,然后再汇总结果

      (2) 净查询吞吐量

      将同一索引复制到多台机器,前端负载均衡器将新来的查询请求发送给加载最少的后台机器

  8. 建立索引过程用到的核心类

     Document 包括 Field1, Field2, ... Field n
    
     Document ---> Analyzer ---> IndexWriter ---> Directory
    
    1. IndexWriter

      写索引的核心组件:创建新索引,添加、删除或更新被索引文档的信息,但是不能用于读取和搜索

    2. Directory

      描述索引存放位置的抽象类

    3. Analyzer

      分析器的抽象类,用于从文本文件中提取语汇单元,作为 IndexWriter 的构造函数

    4. Field

      索引中每个文档都包含一个或多个不同命名的(name=val形式)

    5. Document

      一系列Field的集合,Lucene内核只处理java.lang.String, java.io.Reader和本地数字类型

  9. 根据索引进行搜索过程用到的核心类

    1. IndexSearcher

      读索引的核心组件,以只读的方式打开索引

    2. Term

      搜索功能的基本单元,Term对象包括field-name和val

    3. Query

      查询过程的抽象类

      TermQuery是最基本的查询类型,用来匹配指定域中包含特定项的文档

      最基本流程示例

       Directory dir = FSDirectory.open(new File("./src/lia/meetlucene/index"));
      
       IndexSearcher indexSearcher = new IndexSearcher(dir);
      
       Query query = new TermQuery(new Term("contents", "patent"));
      
       TopDocs hits = indexSearcher.search(query, 15);
      
       System.out.println("Total Hits:  " + hits.totalHits);
      
       for (ScoreDoc scoreDoc : hits.scoreDocs) {
           Document doc = indexSearcher.doc(scoreDoc.doc);
           System.out.println(doc.get("fullpath"));
       }
      
       indexSearcher.close();
      
    4. TopDocs

      负责展示搜索结果,是一个简单的指针容器,指向排名前N的搜索结果

  • Lucene的三大主要组件

    1. 索引

      把原始文本文档压缩储存成索引文件

    2. 分析

      从原始文本文档或用户查询输入中,进行分词变成语汇单元

    3. 搜索

      根据分析结果从索引中找到相关文档,并评分排序

发布了391 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/captxb/article/details/103251747
今日推荐