lucene 订阅
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。 [1] 展开全文
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。 [1]
信息
外文名
Lucene
类    属
搜索引擎
开发时间
2000年
中文名
全文搜索引擎
开发人
Doug Cutting
Lucene历史
Lucene最初是由Doug Cutting开发的,在SourceForge的网站上提供下 Lucene 图片(2张) 载。在2001年9月作为高质量的开源Java产品加入到Apache软件基金会的 Jakarta家族中。随着每个版本的发布,这个项目得到明显的增强,也吸引了更多的用户和开发人员。2004年7月,Lucene1.4版正式发布,10月的1.4.2版本做了一次bug修正。表1.1显示了Lucene的发布历史。版本 发布日期 里程碑0.01 2000年3月 第一个开源版本(SourceForge)1.0 2000年10月1.01b 2001年7月 最后的SourceForge版本1.2 2002年6月 第一个Apache Jakarta版本1.3 2003年12月 复合索引格式,查询分析器增加,远程搜索,token定位,可扩展的API1.4 2004年7月 Sorting, span queries, term vectors1.4.1 2004年8月 排序性能的bug修正1.4.2 2004年10月 IndexSearcher optimization and misc. fixes1.4.3 2004年冬 Misc. fixes2.4.1 2009年3月8日发布新版本2.3.0 2008年1月 更新为2.3.02.4.0 2008年10月 更新为2.4.02.4.1 2009年 5月 更新为 2.4.12.9.0 2009年9月25号 更新为2.9.02.9.1 2009年11月6号 更新为2.9.13.0.0 2009年11月25号 更新为3.0.03.0.1 2010年2月26号 更新为3.0.13.0.2 2010年6月18号 更新为3.0.23.0.3 2010年12月3号 更新为3.0.33.3.0 2011年7月初 更新为3.3.03.4.0 2011年9月14日 更新为3.4.03.5.0 2011年11月26日 更新为3.5.03.6.0 2012年4月12日更新为3.6.03.6.1 2012年7月23日更新为3.6.14.0 2012年10月12日更新为4.0 [2]  4.2 2013年3月11日更新为4.24.3.1 2013-06-18发布4.4 2013年7月23日更新到4.44.5 2013年10月5日更新到4.55.0.0 2015年2月20日更新到5.0.0
收起全文
精华内容
参与话题
问答
  • Lucene

    千次阅读 2015-04-30 11:52:13
    Lucene
    Lucene
    展开全文
  • LUCENE

    2016-07-08 11:33:44
    Lucene总的来说是:  一个高效的,可扩展的,全文检索库。 全部用Java实现,无须配置。 仅支持纯文本文件的索引(Indexing)和搜索(Search)。 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程...

    Lucene总的来说是: 

    • 一个高效的,可扩展的,全文检索库。 
    • 全部用Java实现,无须配置。 
    • 仅支持纯文本文件的索引(Indexing)和搜索(Search)。 
    • 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。

    在Lucene in action中,Lucene 的构架和过程如下图, 

    image

    说明Lucene是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点。

    让我们更细一些看Lucene的各组件: 

    lucene  zong ti jia gou

    • 被索引的文档用Document对象表示。
    • IndexWriter通过函数addDocument将文档添加到索引中,实现创建索引的过程。
    • Lucene的索引是应用反向索引。
    • 当用户有请求时,Query代表用户的查询语句。
    • IndexSearcher通过函数search搜索Lucene Index。
    • IndexSearcher计算term weight和score并且将结果返回给用户。
    • 返回给用户的文档集合用TopDocsCollector表示。

     

    那么如何应用这些组件呢? 

    让我们再详细到对Lucene API 的调用实现索引和搜索过程。 

    using lucene

    • 索引过程如下:
      • 创建一个IndexWriter用来写索引文件,它有几个参数,INDEX_DIR就是索引文件所存放的位置,Analyzer便是用来对文档进行词法分析和语言处理的。
      • 创建一个Document代表我们要索引的文档。
      • 将不同的Field加入到文档中。我们知道,一篇文档有多种信息,如题目,作者,修改时间,内容等。不同类型的信息用不同的Field来表示,在本例子中,一共有两类信息进行了索引,一个是文件路径,一个是文件内容。其中FileReader的SRC_FILE就表示要索引的源文件。
      • IndexWriter调用函数addDocument将索引写到索引文件夹中。
    • 搜索过程如下:
      • IndexReader将磁盘上的索引信息读入到内存,INDEX_DIR就是索引文件存放的位置。
      • 创建IndexSearcher准备进行搜索。
      • 创建Analyer用来对查询语句进行词法分析和语言处理。
      • 创建QueryParser用来对查询语句进行语法分析。
      • QueryParser调用parser进行语法分析,形成查询语法树,放到Query中。
      • IndexSearcher调用search对查询语法树Query进行搜索,得到结果TopScoreDocCollector。

    以上便是Lucene API函数的简单调用。 

    然而当进入Lucene的源代码后,发现Lucene有很多包,关系错综复杂。 

    然而通过下图,我们不难发现,Lucene的各源码模块,都是对普通索引和搜索过程的一种实现。 

    此图是上一节介绍的全文检索的流程对应的Lucene实现的包结构。(参照http://www.lucene.com.cn/about.htm中文章《开放源代码的全文检索引擎Lucene》) 

    clip_image008

    • Lucene的analysis模块主要负责词法分析及语言处理而形成Term。
    • Lucene的index模块主要负责索引的创建,里面有IndexWriter。
    • Lucene的store模块主要负责索引的读写。
    • Lucene的QueryParser主要负责语法分析。 
    • Lucene的search模块主要负责对索引的搜索。
    • Lucene的similarity模块主要负责对相关性打分的实现。

    了解了Lucene的整个结构,我们便可以开始Lucene的源码之旅了。

     

     

    如上图所示,Lucene源码中共包括7个子包,每个包完成特定的功能:

     

    Lucene包结构功能表

    包名
    功能
    org.apache.lucene.analysis 语言分析器,主要用于的切词,支持中文主要是扩展此类
    org.apache.lucene.document 索引存储时的文档结构管理,类似于关系型数据库的表结构
    org.apache.lucene.index 索引管理,包括索引建立、删除等
    org.apache.lucene.queryParser 查询分析器,实现查询关键词间的运算,如与、或、非等
    org.apache.lucene.search 检索管理,根据查询条件,检索得到结果
    org.apache.lucene.store 数据存储管理,主要包括一些底层的I/O操作
    org.apache.lucene.util 一些公用类

    1analysis对需要建立索引的文本进行分词、过滤等操作

    2standard是标准分析器

    3document提供对DocumentField的各种操作的支持。

    4index是最重要的包,用于向Lucene提供建立索引时各种操作的支持

    5queryParser提供检索时的分析支持

    6search负责检索

    7store提供对索引存储的支持

    8util提供一些常用工具类和常量类的支持

    Lucene中的类主要组成如下:

    1)org.apache.1ucene.analysis语言分析器,主要用于的切词Analyzer是一个抽象类,管理对文本内容的切分词规则。

    2)org.apache.1uceene.document索引存储时的文档结构管理,类似于关系型数据库的表结构。

    3)document包相对而言比较简单,该包下面有3个类,document相对于关系型数据库的记录对象,Field主要负责字段的管理。

    4)org.apache.1ucene.index索引管理,包括索引建立、删除等。索引包是整个系统核心,全文检索的根本就是为每个切出来的词建索引,查询时就只需要遍历索引,而不需要去正文中遍历,从而极大的提高检索效率。

    5)org.apache.1ucene.queryParser查询分析器,实现查询关键词间的运算,如与、或、非等。

    6)org.apache.1ucene.search检索管理,根据查询条件,检索得到结果。

    7)org.apache.1ucene.store数据存储管理,主要包括一些底层的I/0操作。

    8)org.apache.1ucene.util一些公用类。

     

     

     

     

    lucene提供的服务实际包含两部分:一入一出。所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除;所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源。
    写入流程:源字符串首先经过analyzer处理,包括:分词,分成一个个单词;去除stopword(可选)。将源中需要的信息加入Document的各个Field中,并把需要索引的Field索引起来,把需要存储的Field存储起来。将索引写入存储器,存储器可以是内存或磁盘。
    读出流程:用户提供搜索关键词,经过analyzer处理。对处理后的关键词搜索索引找出对应的Document。用户根据需要从找到的Document中提取需要的Field。
    索引过程:从命令行读取文件名(多个),将文件分路径(path字段)和内容(body字段)2个字段进行存储,并对内容进行全文索引:索引的单位是Document对象,每个Document对象包含多个字段Field对象,针对不同的字段属性和数据输出的需求,对字段还可以选择不同的索引/存储字段规则。

     

     

    创建document:这一步骤所指的document是lucene索引是使用的一个数据对象,每个document对应一个数据即一个页面或是数据库中的一行数据等等。数据被抓取之后,需要将数据中的信息分解为多个field,并将这些field通过document组织起来。将数据分解为field并保存到document之后,可以为field以及document指定激励因子以影响结果集的排名。每一个文档最终被封装成了一个 Document 对象。

    analysis document:接下来就是分析文档(analyze document)。搜索引擎不对直接对创建的document对象创建索引,它会对document中包含的数据字段进行分析,分解为多个token。文档分析阶段会涉及很多问题,例如同义词,词汇的变形,以及多语言等问题。lucene提供了一些分析器用以分析文档,用户也可自定义分析器用以分析文档数据。

    分析文档之后就是将文档添加到索引中,这个步骤lucene已经提供了API让用户可以轻松创建索引。

    索引创建完成之后,数据的准备工作已经完成,之后就是等待用户使用搜索引擎搜索了。一般是通过浏览器或客户端提交检索词,搜索引擎接受到用户请求之后,会将检索词转换为一个Query对象,即Build Query阶段。Lucene提供了一个QueryParser的包来讲用户提交的检索词转换为Query对象,检索词中有可能包含布尔操作符或通配符或是限制结果集数量的条件,如果你的页面上想要实现控制结果集数量或是其他限制条件的话,也是需要通过一定的逻辑将其转换为相应的查询条件。通常,lucene提供的QueryParser足以应付用户提交的检索词,如果想要添加自己的逻辑的话也可以自定义QueryParser。

     lucene使用Query对象查询是一个查询索引以及提取与Query对象匹配的文档并按照用户需要对结果集进行排序的过程。lucene已经封装了具体的搜索实现并提供了简便的API,如果用户需要实现特殊的查询逻辑,整个查询实现也是可以拓展的。这个包提供了对在建立好的索引上进行搜索所需要的类。比如 IndexSearcher 和 Hits, IndexSearcher 定义了在指定的索引上进行搜索的方法,Hits 用来保存搜索得到的结果。

    搜索算法当前大概有三种:

    1、纯布尔模型:该模型对于文档的判断仅限于匹配与不匹配,并不存在相关性判断。

    2、向量空间模型:将检索词与document抽象为N维向量空间中的向量,每一个term作为一个维度,通过计算检索词与document向量之间的距离来判断相似性与相关性。

    3、概率模型:使用概率的方法来判断一个document的相关性

    lucene使用的检索方法是纯布尔模型以及向量空间模型的联合体。

    一旦我们获得了与检索词相匹配的document,经过排序,然后就是向用户展示检索结果。lucene并没有提供展示检索结果的功能,但是在lucene中提供了动态摘要以及高亮检索词的功能。

    展开全文
  • lucene

    2014-11-04 21:46:05
    solr/lucene和nutch/lucene的区别 发信站: 水木社区 (Sun Feb 24 11:34:40 2013), 站内 lucene是一个做搜索用的类库。 nutch和solr都是基于lucene的,二者都是可直接运行的应用程序。 solr是lucene的服务器化,...

    solr/lucene和nutch/lucene的区别


    lucene是一个做搜索用的类库。
    nutch和solr都是基于lucene的,二者都是可直接运行的应用程序。
    solr是lucene的服务器化,内嵌了jetty,提供REST接口,
    用户可以直接post数据给solr,然后由solr进行索引。
    solr不包含下载系统,用户需要负责下载,转成solr所需要的格式。
    solr还提供查询接口供用户查询。
    nutch可以看成一个out-of-box的搜索引擎,包含了crawler,indexer和查询接口。
    但nutch更偏向于下载系统。

    一般可以使用nutch做crawler,而使用solr做indexer和查询接口。


    1. 导入性能,es更强

    2. 查询性能,solr 4.0最好,essolr 3.6持平,可以乐观的认为,等es采用了lucene4之后,性能会有质的提升

    3. Es采用SAM_CODE这样的查询性能很好,但是用_all性能就很差,而且差别非常大,因此,个人认为在目前的es情况下,仍然有性能提升的空间,只是现在还没找到方法。

    elasticsearch solr对比评测:http://engineering.socialcast.com/2011/05/realtime-search-solr-vs-elasticsearch/
    elasticsearch官网:http://www.elasticsearch.org/


    展开全文
  • Lucene

    2010-12-17 10:25:40
    预览文章: Lucene 3.0 原理与代码分析 永久链接: http://ji-gl.iteye.com/blog/653970 Lucene 3.0 原理与代码分析 在系统维护中偶然间接触到了搜索引擎这个概念,在网上一搜,找到了这个好的博客,就转载了,...
    预览文章: Lucene 3.0 原理与代码分析
    永久链接: http://ji-gl.iteye.com/blog/653970
    Lucene 3.0 原理与代码分析

    在系统维护中偶然间接触到了搜索引擎这个概念,在网上一搜,找到了这个好的博客,就转载了,附件中有pdf文档,想好好研究这个东东,也希望能给大家帮助:
    本系列文章将详细描述几乎最新版本的Lucene的基本原理和代码分析。

    其中总体架构和索引文件格式是Lucene 2.9的,索引过程分析是Lucene 3.0的。

    鉴于索引文件格式没有太大变化,因而原文没有更新,原理和架构的文章中引用了前辈的一些图,可能属于早期的Lucene,但不影响对原理和架构的理解。

    本系列文章尚在撰写之中,将会有分词器,段合并,QueryParser,查询语句与查询对象,搜索过程,打分公式的推导等章节。


    Lucene学习总结之一:全文检索的基本原理

    http://forfuture1978.iteye.com/blog/546771

    Lucene学习总结之二:Lucene的总体架构

    http://forfuture1978.iteye.com/blog/546808

    Lucene学习总结之三:Lucene的索引文件格式(1)

    http://forfuture1978.iteye.com/blog/546824

    Lucene学习总结之三:Lucene的索引文件格式(2)

    http://forfuture1978.iteye.com/blog/546832

    Lucene学习总结之三:Lucene的索引文件格式(3)

    http://forfuture1978.iteye.com/blog/546841

    Lucene学习总结之四:Lucene索引过程分析(1)

    http://forfuture1978.iteye.com/blog/587113

    Lucene学习总结之四:Lucene索引过程分析(2)

    http://forfuture1978.iteye.com/blog/587116

    Lucene学习总结之四:Lucene索引过程分析(3)

    http://forfuture1978.iteye.com/blog/587120

    Lucene学习总结之四:Lucene索引过程分析(4)

    http://forfuture1978.iteye.com/blog/587122
    展开全文
  • Lucene Solr 811

    万次阅读 多人点赞 2019-10-29 23:11:30
    文章目录solrlucene倒排索引实际举例lucene API 介绍创建索引新建 maven 项目,添加依赖创建测试类,添加以下代码查看索引运行 luke查看文档指定分词器,并测试分词查询测试从索引查询solr 安装把 solr-8.1.1.tgz 传到...
  • Lucene整理

    千次阅读 2017-03-23 00:24:20
    Lucene
  • lucene详细使用教程

    2017-05-12 09:39:41
    lucene
  • Lucene介绍与使用

    万次阅读 多人点赞 2018-09-27 21:29:24
    1、了解搜索技术 1.1 什么是搜索 简单的说,搜索就是搜寻、查找,在IT行业中就是指用户输入关键字,通过相应的算法,查询并返回用户所需要的信息。 1.2 普通的数据库搜索 类似:select * from 表名 where 字段名...
  • 一、Lucene介绍 1. Lucene简介  最受欢迎的java开源全文搜索引擎开发工具包。提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的...

空空如也

1 2 3 4 5 ... 20
收藏数 39,227
精华内容 15,690
关键字:

lucene