首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

二) 第一章 初识Lucene:索引和搜索

2012-08-30 
2) 第一章 初识Lucene:索引和搜索?1. 为什么需要搜索? 为什么需要高效的、准确的搜索? 你说呢??2. 怎么样快

2) 第一章 初识Lucene:索引和搜索

?

1. 为什么需要搜索

? 为什么需要高效的、准确的搜索? 你说呢?

?

2. 怎么样快速搜索

? 这个道理很简单。为什么你从《现代汉语词典》中找一个词相当快速,而从一本小说中找起来费劲?

? 词典是按一定顺序编排过的。那么,如果我给小说的每个词都编个目录来说明在哪些页码能找到它们呢?

? 好吧,编排目录需要花点时间对吗?但是一次性编排完了,以后找起来就会很方便而且不用每次查找都再编排目录了。

?

3. Lucene的结构

? 其实,Lucene只做两件事:索引、搜索

? 索引,就是编目录的过程。它的本质目的就是把杂乱无章的原始数据(可能来自word,txt,网页,pdf等)编排成有序的数据结构;

? 搜索,就是查找这个目录的过程。小学时候学过怎样查字典吧!按音序查、按部首查,Lucene的索引怎么查?放心,它很简单!

?

? 至于Lucene的系统结构、源码结构,可以参考http://www.lucene.com.cn/about.htm#_Toc43005313

? 看多了未必懂。

?

4. 索引过程

? 1) 获取内容

? ? 这一步是确定目标!就是你要索引什么东西,也就是将来你要从哪些内容里搜索!

? ? 你想索引一本《红与黑》,自然能搜到“于连”,但是你若搜索“郭富城”,可能就要悲剧了,是的,“B+侦探”应该也搜不到!

? ? 很遗憾的是,这一步不属于Lucene的范畴,Lucene没有义务去帮你解析XML,帮你解析PDF,甚至是个txt,你也应该使用JavaAPI来做此事!

? ? 事实上,Lucene只认识两个东西:String 和 Reader 对象,如何生成这两个对象,它不关心。

? ? 不过别灰心,很多其它框架可以帮我们完成"获取内容"的过程。即便我们的目标是互联网,也有开源的爬虫帮我们获得它们。

? 2) 创建文档

? ? 文档(Document),可以把它想像成一个抽象的信息集合。它可以对应着一本书,也可以对应一本书中的每一章。具体怎么设计要结合你的应用。

? ? 文档中可以包含若干域(Field),你可以把它们设计成一本书的: "书名"、"内容"、"作者"、"出版日期"等,也可以设计成一章中的"标题"、"小节"、"内容"等

? ? 如何设计,这由你来决定!你只管把你设计好的图纸交给Lucene,剩下的他来做。

? 3) 分析文档

? ? 这一步负责把文本拆分成一个一个的词元(token),也就是分词的过程。

? ? 看过百度讽刺谷歌的广告的同学都知道,就是把"我知道你不知道我知道你不知道我知道你不知道"拆成一个个词的过程,知道不?

? 4) 索引文档

? ? 分析完了就可以索引了。这一步完全由Lucene内部来完成。你只需要调用它简易的API即可。

?

5. 搜索过程

? 1) 用户接口(UI)

? ? 就是给用户做个小框框,让他输入内容,然后搜到他要的结果。

? ? UI的设计一定要简易,要让你的不懂计算机的上帝们能够快速的上手使用。毕竟他们能看到的就这么多,你之前做的再多(如索引过程)他们都不知道。

? 2) 创建查询

? ? 通过UI得到了用户的搜索请求后,要把它抽象出来,比如构造成Query对象。

? ? Query对象可以理解成一堆查询信息:仅查找在标题中包含"美女"而且不包含"帅哥"的内容

? 3) 搜索查询

? ? 就是把符合上一步的查询条件的结果找出来,然后排个序。

? ? 有三种常见的查询模型:Pure boolean model ? ?Vector space model ? ?Probabilistic model

? ? Lucene通过前两种方式实现搜索。

? 4) 渲染结果集

? ? 这一步负责把搜索到的内容展示给你的上帝看!

?

6. 其它

? 你应该认识到,完整的搜索引擎通常还要包含更多复杂的内容,比如权限控制问题。

? 领导会告诉你哪些内容可以被索引,哪些不能。

? 你可以用Lucene把《红与黑》索引完,让下属搜到它。但是千万别把领导的《金瓶梅》也公布出去。

? 再复杂一点的需求可能是:两本书都能被索引,但是后者只能被公务员搜到!

?

?

?

1 楼 pointC 2012-01-06   当公务员好哪,还能搜到金瓶梅。 不知道“人民搜索”能否搜到《金瓶梅》,哈哈

热点排行