Lucene 搜索引擎( ing..)

来源:互联网 发布:指定的网络名不再可用 编辑:程序博客网 时间:2024/04/28 15:39

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

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 ) 并参考其博客。

原创粉丝点击