《Lucene In Action》 01 初识Lucene

基于Lucene 3.0.1

1、Lucene简单定义

Lucene是高性能、可扩展的信息检索(IR)工具库。向用户提供了简单易用的索引和搜索API,屏蔽了内部复杂而先进的信息检索技术实现过程
Lucene仅仅是一个提供搜索功能的类库,你还需要根据实际情况自行完成搜索程序的其他模块(网页抓取、文档处理、服务器运行、用户界面和管理等)
Lucene的核心jar包很小,只有1M左右,核心之外,存在大量的扩展模块。另外你如果寻找一些成型的网页搜索、文档处理或搜索引擎,可以在Lucene wiki的技术支持分页找到

题外话:Nutch是Lucene创始人创建的开源Web搜索引擎,Hadoop是Nutch项目的拓展内容,通过Map/Reduce架构提供分布式存储和计算工具

2、搜索程序的组件

2.1 索引组件
建立索引(indexing)的产出就是索引(index)
获取内容

考虑提供搜索的内容都在哪里,文件系统,内容管理系统,网站,数据库,本地文档等等

考虑是否需要搜索权限控制

考虑是否需要提供增量运行机制,索引时只针对上次运行后有改变的文档

考虑是否需要内容获取模块作为持续运行的后台服务,实时获取新增或修改的文档信息

有很多开源的内容获取应用,如

Solr 支持关系数据库和XML文档,集成Tika可以处理复杂文档

Nutch 大规模Web站点爬虫工具

Grub Web站点爬虫工具

Heritrix 互联网文档搜索程序

建立文档

文档主要包括几个域:title body abstract author url等

考虑如何将原始内容分割成合适的文档

考虑是否需要文档过滤器从原始文档中过滤掉格式等信息

考虑是否需要创建额外的域

考虑是否需要对文档和域加权,加权可以在建立文档时,也可以在搜索期间动态完成

Lucene提供了一个API建立域和文档,Tika可以很好的实现文档过滤

文档分析(分词)

分词

建立索引

将文档加入到索引列表,Lucene提供了一个异常简单的API完成索引操作

2.2 搜索组件
搜索界面

Lucene不提供默认的界面,你要提供一个界面把用户的搜索请求转换成和是的Query对象,以便搜索引擎使用

建立查询

对于建立Query对象,Lucene提供了一个叫做QueryParser的强大开发包

搜素查询

查询索引并返回匹配的文档,可能会对返回的结果过滤、排序

题外话:

常见搜索理论模型:

纯布尔模型

向量空间模型

概率模型

Lucene可针对具体搜索让你决定采用纯布尔模型还是向量空间模型

展现结果

你懂的

2.3 搜索程序的其他模块
管理界面

Lucene管理界面向开发人员提供了大量配置选项

分析界面

Lucene不提供分析工具

分布式搜索

两种基本的方式:

如果处理的数据量较大,可以将数据分割成小块,让多台服务器分别搜索对应的部分,然后将各部分的搜索结果合并成总结果集

如果想增加搜索并发量,可以将同一索引复制到多台服务器,由负载均衡分发请求

Lucene没有提供分布式支持,但Apache Lucene项目下的Solr和Nutch都提供了对索引拆分和复制的支持。还有Katta、Elastic search等项目。在架设自己的搜索之前,可以了解一下这些已有的解决方案

 

汤能养身整理,转载注明

 

你可能感兴趣的:(Lucene)