【项目实战】Lucene的API介绍

一、搜索引擎框架

Lucene 或者 solr 有什么不一样? 分别何时使用?
首先 Solr是基于Lucene做的,Lucene是 一套信息检索工具包,但并不包含搜索引擎系统,它包含了索引结构、读写索引工具、相关性工具、排序等功能,因此在使用Lucene时你仍需要关注搜索引擎系统,例如数据获取、解析、分词等方面的东西。

而Solr的目标是 打造一款企业级的搜索引擎系统,因此它更接近于我们认识到的搜索引擎系统,它是一个搜索引擎服务,通过各种API可以让你的应用使用搜索服务,而不需要将搜索逻辑耦合在应用中。而且Solr可以根据配置文件定义数据解析的方式,更像是一个搜索框架,它也支持主从、热换库等操作。还添加了飘红、facet等搜索引擎常见功能的支持。

因而,Lucene使用上更加灵活,但是你需要自己处理搜素引擎系统架构,以及其他附加附加功能的实现。而Solr帮你做了更多,但是是一个处于高层的框架,Lucene很多新特性不能及时向上透传,所以有时候可能发现需要一个功能,Lucene是支持的,但是Solr上已经看不到相关接口。

二、Lucene vs Solr 的解释

Many people new to Lucene and Solr will ask the obvious question: Should I use Lucene or Solr?The answer is simple: if you’re asking yourself this question, in 99% of situations, what you want to use is Solr.A simple way to conceptualize the relationship between Solr and Lucene is that of a car and its engine. You can’t drive an engine, but you can drive a car. Similarly, Lucene is a programmatic library which you can’t use as-is, whereas Solr is a complete application which you can use out-of-box.Make sth people want.

三、更多解释

Lucene更像是一个SDK。 有完整的API族以及对应的实现。你可以利用这些在自己的应用里实现高级查询(基于倒排索引技术的),Lucene对单机或者桌面应用很实用很方便。但是Lucene,需要开发者自己维护索引文件,在多机环境中备份同步索引文件很是麻烦。于是,就有了Solr。而Solr是一个有HTTP接口的基于Lucene的查询服务器,封装了很多Lucene细节,自己的应用可以直接利用诸如 …/solr?q=abc 这样的HTTP GET/POST请求去查询,维护修改索引。给个比方就是,Lucene是给你一堆包,让你自己从底层构建一个数据库。而Solr是一个实现好的数据库程序,安装后就可以直接用了。

四、对比

Lucene是search engine, 是java library, 提供的是java api, 可以用于任何application中(当然包括solr)Solr是search server, 是基于Lucene上的一个http wrapper(虽然这个说法不准确,solr还提供了很多其它feature),提供的是http apisolr依赖于Lucene,目的是更方便使用。主要的competitor是elasticsearch, elasticsearch也是基于Lucene搞的solr ,更多是和nutch 的结合使用

一、Lucene的API中五个基础的类

为了对文档进行索引,Lucene 提供了五个基础的类

  • Document
  • Field
  • IndexWriter
  • Analyzer
  • Directory

1.1 Document

  • 用来描述文档的
  • 文档可以指一个 HTML 页面,一封电子邮件,或者是一个文本文件。
  • 一个 Document 对象由多个 Field 对象组成的。
  • 一个 Document 对象=数据库中的一个记录,每个 Field 对象=记录的一个字段。

1.2 Field

  • 用来描述一个文档的某个属性的
  • 比如一封电子邮件的标题和内容可以用两个 Field 对象分别描述。

1.3 Analyzer

  • 在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是由 Analyzer 来做的。
  • Analyzer 类是一个抽象类,它有多个实现。
  • 针对不同的语言和应用需要选择适合的 Analyzer。
  • Analyzer 把分词后的内容交给 IndexWriter 来建立索引。

1.4 IndexWriter

  • Lucene 用来创建索引的一个核心的类
  • 作用:把一个个的 Document 对象,加到索引中来。

1.5 Directory

  • Lucene 的索引的存储的位置
  • 一个抽象类,它目前有两个实现

[x]第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置
[x]第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。

二、Lucene的API中Query类

这是一个抽象类,他有多个实现,比如 TermQuery, BooleanQuery, PrefixQuery.
这个类的目的是把用户输入的查询字符串,封装成 Lucene 能够识别的 Query。

三、Lucene的API中的IndexSearcher

在建立好的索引上进行搜索的。
只能以只读的方式打开一个索引,所以可以有多个 IndexSearcher 的实例在一个索引上进行操作。

四、Lucene的API中的Hits

保存搜索结果

猜你喜欢

转载自blog.csdn.net/wstever/article/details/129655667