转载目的:因为以后要用solr工具,生成二级索引到hadoop中快速查询。而solr是基于lucene开发的。

Lucene入门基础教程

简介

[日期:2014-06-08] 来源:Linux社区  作者:xinxinqiu

1.1        全文检索的概念

 
1)          从大量的信息中快速、准确地查找出要的信息
 
2)          搜索的内容是文本信息(不是多媒体)
 
3)          搜索的方式:不是根据语句的意思进行处理。如果要搜索的文本为” 2012年的春晚有赵本山吗”,那么含有这些词(2012年、春晚、赵本山)就能搜索出来。每一个词都是关键词。
 
4)          全面、快速、准确是衡量全文检索系统的关键指标。
 
5)          概括:
 
a)    只处理文本
 
b)    不处理语义

c)    搜索时英文不区分大小写

 
d)    结果列表有相关度排序

全文检索应用场景:

 
  * 信息量必须特别大
 
  * 做一个全文检索的指标
 
      快速
 
      准确

站内搜索

 
通常用于在大量数据出现的系统中,找出你想要的资料。常见的有
 
a)    bbs的关键字搜索
 
baidu贴吧      林志玲  、胡汉三
 
b)    商品网站的搜索等
 
中关村在线    商品的名称、电脑硬件名称 (CPU)
 
c)    文件管理系统
 
对文件的搜索功能。Window的文件搜索
 
1.3.2垂直搜索
 
a)    是针对 某个行业的搜索引擎
 
b)    是搜索引擎的细分和延伸
 
c)    是针对网页库中的专门信息的整合
 
d)    其特点是专、深、精,并具有行业色彩
 
e)    可以应用于购物搜索、×××搜索、人才搜索
 
1.1        全文检索与数据库搜索的区别
 
1.4.1数据库的搜索 
 
类似:select * from  表名 where 字段名 like ‘%关键字%’
 
例如:select * from article where content like’%here%’
 
结果:  where  here shere
 
缺点:
 
1)    搜索效果比较差
 
2)    在搜索的结果中,有大量的数据被搜索出来,有很多数据是没有用的。
 
3)    查询速度在大量数据的情况下是很难做到快速的。
 
1.4.2全文检索
 
1)    搜索结果按相关度排序:意味着只有前几个页面对于用户来说是比较有用的,其他的结果与用户想要的答案很可能相差甚远。数据库搜索是做不到相关度排序的。
 
2)    因为全文检索是采用引索的方式,所以在速度上肯定比数据库方式like要快。
 
3)    所以数据库不能代替全文检索。
 

Lucene 的详细介绍

Lucene 的下载地址

基于Lucene多索引进行索引和搜索 

Lucene 实战(第2版) 中文版 配套源代码 

Lucene 实战(第2版) PDF高清中文版 

使用Lucene-Spatial实现集成地理位置的全文检索 

Lucene +  分布式搜索运行框架 Nut 1.0a9 

Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a8 

Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a7 

Project 2-1: 配置Lucene, 建立WEB查询系统[ 10.10] 

全文检索只是一个概念,而具体实现有很多框架,lucene是其中的一种。Lucene的主页。本文用的是3.0.1版本。

 
互联网搜索结构图
 

说明:
 
1)    当用户打开www.baidu.com网页搜索某些数据的时候,不是直接找的网页,而是找的百度的索引库。索引库里包含的内容有索引号和摘要。当我们打开www.baidu.com时,看到的就是摘要的内容。
 
2)    百度的索引库的索引和互联网的某一个网站对应。
 
3)    当用户数据要查询的关键字,返回的页面首先是从索引库中得到的。
 
4)    点击每一个搜索出来的内容进行相关网页查找,这个时候才找的是互联网中的网页。
 
2.2 lucene的大致结构框图
 

说明:
 
1)    在数据库中,数据库中的数据文件存储在磁盘上。索引库也是同样,索引库中的索引数据也在磁盘上存在,我们用Directory这个类来描述。
 
2)    我们可以通过API来实现对索引库的增、删、改、查的操作。
 
3)    在数据库中,各种数据形式都可以概括为一种:表。在索引库中,各种数据形式也可以抽象出一种数据格式为Document。
 
4)    Document的结构为:Document(List<Field>)
 
5)    Field里存放一个键值对。键值对都为字符串的形式。
 
6)    对索引库中索引的操作实际上也就是对Document的操作。