`
fdyang
  • 浏览: 79880 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Lucene 搜索引擎( ing..)

阅读更多

对于搜索,按被搜索的资源类型,分为两种:可以转为文本的、多媒体类型。

Lucene所做的是全文检索(Full-Text Retrieval),是指以文本作为检索对象,找出含有指定词汇的文本。全面、准确和快速是衡量全文检索系统的关键指标。

关于全文检索,我们要知道:1,只处理文本。2,不处理语义。3,搜索时英文不区分大小写。4,结果列表有相关度排序。

在信息检索工具中,全文检索是最具通用性和实用性的。

搜索的原理基本一致.
Whether it be a tool for searching the entire internet, a corporate intranet or a small website, the principal is the same.
It might go something like " Find all the availabel data sources and move then into an archive, stroe the data in some soft of searchable

format, and make a client to search this database... "
Put more formallly the three steps are Crawling , Indexing, and Searching.

*Crawling. ( -> Make data heap )
- is the process of finding all availavle data sources and storing it in some archives.

*Indexing: (-> Make structured data )
- is the process in order to make the content more accessible , the data need to be stored in a structured format.

*Searching : ( -> Get Result by Search a term )
- is the process to do a query and get the result.

Without a doubt the most challanging part of a search engine is the indexing.

Indexing . (索引)
Lucene索引过程分成三个主要的操作阶段:(1)将数据转换为文本.--> (2) 分析文本-->(3)分析过的文本保存到索引库中。

索引中五大核心类:
(1) IndexWriter类
- 创建一个新的索引并且把文档加入到已有的索引中。(仅对索引进行写操作)

(2) Directory类
- 描述了索引存放的位置.
- 是抽象类,有2个具体的子类. FSDirectory(文件系统的目录中创建索引文件), RAMDriectory.(内存中保存数据)

(3) Analyzer类
- 文本在被索引之前,需要进过分析器(Analyzer)的处理。
- 应用程序在IndexWriter的构造函数中指定程序所需要使用的分析器。
- 负责从被索引的文本文件中提取语汇单元(tokens),剔除无用信息。
- 是抽象类,Lucene中提供他的几个具体实现类。

(4) Document类
- 代表一些域的(Fiield) 的集合。
- 可以吧Document对象当成一个虚拟的文档(web页面,Email消息,文本文件),然后从中取回大量的数据。

(5) Field 类,
- 每个Document对象包括一个或多个域(Field).每个域对应于一段数据
- Lucene提供四种不同的域: Keyword域,UnInexed域,UnStored域,Text域。

Searching ( 搜索)
搜索中的四大核心类.
(1)IndexSearcher类.
- 搜索之前由IndexWriter类所创建的索引.
- 最简单的search方法是将一个Query对象作为参数,返回一个Hits对象.
IndexSearcher is = new IndexSearcher(FSDirectory.getDirectory("/tmp/index",false));
//查找 contents Field中包含单词"lucene"的所有文档。TermQuery 是从抽象父类Query继承而来。
Query q = new TermQuery(new Term("contents","lucene"));

Hits hits = is.search(q);

(2)Term类.
- 用于搜索的基本单元。包含了一对字符串元素. 和 Field中的name , value 相对应。

(3) Query类
- 抽象类,具体的子类有TermQuery, BoolearnQuery, PhraseQuery, PrefixQuery 等.
- 其中TermQuery是最基本的查询类型。

(4) Hits 类.
- 是存放有序搜索结果之争的简单容器。

参考: Lucene in Action , 并对Lucene/Nutch 的开发者 Doug Cutting 致以崇高的敬意。
参考: Lucene Website Crawler and Indexer (作者: stlane ) 并参考其博客。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics