Lucene In Action 学习笔记(一)

1.1 怎样应对信息爆炸时代

  信息检索技术  

1.2 Lucene是什么

1.2.1 Lucene是什么

  Lucene是一款高性能的,可扩展的信息检索工具库。信息检索是指文档搜索,文档内信息搜索,文档相关
元数据操作。
  信息检索(Information retrieval)
  使用lucene后,你会发现它为你提供了一套#简单而强大的核心API#。

1.2.2 Lucene 能做些什么

  Lucene只是一个软件类库,或者一个工具箱。而并是不一个完整的搜索程序。Lucene专注于#文本索引#和#搜索#功能,并且运行效果非常不错。

1.3 Lucene中的组件 

1.3.1 索引组件

 (1)获取内容:lucene 作为一款核心搜索库,并不提供任何功能来实现内容获取
开源爬虫工具:Nutch,Solr,Grub 
 (2)建立文档: 将下载抓取的内容转换成文档的形式。
 (3)文档分析:将文本分割成一系列被称为语汇单元的独立的原子元素。
 (4)文档索引:文档被加入到索引列表。 

1.3.2 搜索组件 

  搜索处理的过程就是从索引中查找单词,从而找到包含该单词的文档。搜索质量主要由查准率(precision)和
查全率(recall)来衡量。benchmark模块用来检验。
  (1)用户搜索界面:简单,美观,结果展现列表。
  (2)建立查询条件(build query):lucene 提供了一个叫查询解析器(queryParser)的强大的并发包,可以根据通用的查询语法把用户
输入的文本处理成查询对象。封装查询对象的时候:可以根据自己的语法做一些特殊的处理。比如电子商务网站:会对利率高的商品进行加权。  
  (3)搜索查询(search query)
  查询检索索引并返回与查询语句匹配的文档,返回的结果按查询请求进行排序。
  (4)展现结果
  用直观,易用的方式为用户展现结果。  

1.3.3 其他组件

  管理界面,分析界面,搜索范围。  

1.3.4 lucene 与其他程序整合

  在自己的项目中加入Lucene  

1.4 Lucene实战:程序示例

  1.4.1 Index  Demo1

  1.4.2 Search Demo2

1.5 Lucene 索引和搜索核心类介绍

  IndexWriter,Directory,Analyzer,Document,Field  

1.5.1 IndexWriter

  IndexWriter(写索引)是索引的核心组件,这个类负责#创建索引或者修改,删除已有索引#。(提供索引的写入操作,
不提供读取和搜索操作)  

1.5.2 Directory

  根据索引的存储路径,#读取索引文件#,最后传递给Indexwriter类(通过构造方法)。

1.5.3 Analyzer   

  文本文件在被索引之前,需要先经过Analyzer(分析器)处理。Analyzer由IndexWriter在构造中指定,负责从文本文件中提取
词汇单元。(如果内容不是纯文本文件,那就需要先将其转换成)文本文档。

1.5.4 Document 

  Document(文档)对象代表一些域(Field)的集合。可以将Document对象理解为虚拟文档--比如web页面或者文本文件--然后你可以从中取回大量的数据。
  (Document 对象的结构比较简单,为一个包含多个Field对象的容器;
Field是指包含能被索引的文本内容)。

1.5.5 Field

  索引中每个文档都包含一个或者多个不同命名的域,文档可能拥有
不止一个同名的域。

1.6 理解搜索过程的核心类

  IndexSercher,Term,Query,TermQuery,TopDocs  

1.6.1 IndexSearcher

  这个类公开了几个搜索方法,它是连接索引的中心环节。IndexSearcher不能直接打开索引文件,它间接通过Directory
实例在读取索引文件。   
  最简单的一个方法时,传入查询对象(Query)和查询数,最后返回一个TopDocs对象。
  Directory dir=FSDirectory.open(new File("/temp/index"));
  IndexSearcher searcher=new IndexSearcher(dir);
  Query q = new TermQuery(new Term("contents","lucene"));
  TopDocs hits = searcher.search(q,10);
  searcher.close();

1.6.2 Term

  Term对象是搜索功能的基本单元。
  Query q = new TermQuery(new Term("contents","lucene"));
  TopDocs hits = searcher.search(1,10);
  上面的代码,表示让Lucene寻找contents域中包含单词lucene的前十个文档。

1.6.3 Query

  Lucene含有许多具体的Query(查询)子类。到目前为止,我们只接触了Lucene Query最基本的子类:TermQuery类。
  其他的Query子类还有:BooleanQuery,PrefixQuery等。  

1.6.4 TermQuery

  最简单,最基本的查询项。可以查询匹配出指定域中包含指定的文档  。

1.6.5 TopDocs

  TopDocs类是一个简单的指针容器。指针一般指向前N个排名的搜索结果(匹配上的文档)。    
备注:
  Lucene 是一个信息检索工具库,而不是一个软件成品。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值