基于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等项目。在架设自己的搜索之前,可以了解一下这些已有的解决方案
汤能养身整理,转载注明
时间: 2024-10-17 15:33:31