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把《红与黑》索引完,让下属搜到它。但是千万别把领导的《金瓶梅》也公布出去。
再复杂一点的需求可能是:两本书都能被索引,但是后者只能被公务员搜到!
分享到:
相关推荐
三、Lucene搜索步骤 1. 打开索引:使用Directory对象和IndexReader打开已创建的索引。 2. 创建搜索器:基于IndexReader创建一个IndexSearcher对象,它是实际执行搜索操作的工具。 3. 构建查询:使用QueryParser...
Lucene是一个基于Java的全文索引工具包。 1. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 2. 全文检索的实现:Luene全文索引和数据库索引的比较 3. 中文切分词机制简介:基于词库和自动切分词算法的...
Lucene是一个开源的Java库,提供了强大的文本分析、索引和搜索功能,被广泛应用于各种信息检索系统中。 第一章 引言 在信息爆炸的时代,搜索引擎成为人们获取信息的重要工具。Apache Lucene作为一款强大的全文搜索...
总之,Lucene是一个强大的文本搜索库,通过掌握其核心原理和API,我们可以构建出高效、精准的全文搜索系统。本项目提供了一个基础的实现示例,对于初学者来说,是学习Lucene索引和查询的绝佳起点。在实际应用中,...
本文将深入探讨如何利用Lucene实现增量索引,这是一种在数据库或文件系统更新时仅对新数据或变化数据进行索引的技术,以降低资源消耗并保持搜索性能。 **1. Lucene基础知识** Lucene首先需要理解的是它的核心概念,...
索引过程(indexer)将这些数据转化为Lucene索引,然后搜索过程(searcher)可以高效地查找匹配的文档。 与传统数据库的比较: Lucene和数据库在索引和检索数据方面存在相似之处,但有显著的区别。数据库通常存储...
一个Lucene索引是由多个文件组成的,包括但不限于 segments文件、.del文件(删除文档标记)、.tii和.tis文件(Term Info Index和Term Info postings)、.frx、.fdx、.fdt、.fdt(Field Data)等。这些文件共同构成了...
以上就是Lucene索引器实例的基本介绍,通过这个实例,我们可以理解到如何使用Lucene来创建、管理和搜索文本索引。在实际项目中,可以根据需求选择合适的存储(如硬盘目录或分布式存储)、优化分析器配置、处理大量...
3. 工具支持:Lucene提供了丰富的工具和API,如Luke工具可以查看索引结构,Solr和Elasticsearch则是基于Lucene的全文搜索引擎服务,提供了更高级的功能和服务。 综上,深入理解Lucene的索引机制有助于优化搜索性能...
- **多字段索引**:一个文档可以有多个字段被索引,方便针对不同字段进行搜索。 - **模糊搜索**:支持通配符、前缀、短语等查询,如`new WildcardQuery(new Term("title", "Java*"))`。 - **评分和排序**:Lucene...
在Lucene3.0中创建索引是一个关键功能,可以帮助用户快速地检索和管理大量的文本数据。本篇文章将详细介绍如何使用Lucene3.0来创建索引,并通过一个具体的例子来演示整个过程。 #### 一、Lucene3.0简介 Lucene是一...
Luke 提供了诸如查看文档字段、搜索索引、查看倒排索引结构等功能,对于开发者来说是了解和调试 Lucene 索引的利器。 Luke 的源码也公开在 GitHub 上,这对于想深入理解 Lucene 内部机制的开发者来说是一个宝贵的...
在信息技术领域,搜索引擎的高效运作离不开底层索引技术的支持,而Lucene作为Apache软件基金会的一个开放源代码项目,正是一个强大的全文检索库,它提供了高效的文本搜索功能。本文将围绕“lucene索引查看程序及代码...
Lucene 是一个高性能、全文本搜索库,被广泛用于构建高效的搜索引擎和信息检索系统。它提供了完整的搜索功能,包括分析、索引、查询以及结果排序等。在Java开发中,Lucene 提供了丰富的API来简化这些操作。以下是...
在深入探讨Lucene删除索引这一主题之前,我们先来理解一下Lucene的基本概念。Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发。它提供了高性能、可扩展的搜索和索引功能,广泛应用于各种应用程序中,如...
理解Lucene的索引结构原理对于优化搜索性能和设计高效的搜索应用至关重要。 首先,我们要知道Lucene的索引并非数据库中的那种可以立即定位数据的索引,而是用于快速查找文档中包含特定单词的索引。这个过程分为以下...
索引是Lucene处理文档的关键步骤,它将文本数据转换为一种结构化的、可快速搜索的形式。在创建索引时,Lucene会对文档进行分词,生成一系列的关键词(也称为术语或Token),然后构建倒排索引。倒排索引是一种数据...
Lucene创建索引步骤: 1、创建Directory(索引位置) 2、创建IndexWrite(写入索引) 3、创建Document对象 4、为Document添加Field(相当于添加属性:类似于表与字段的关系) 5、通过IndexWriter添加文档到索引中