lucene学习
文章平均质量分 71
pangliyewanmei
这个作者很懒,什么都没留下…
展开
-
lucene在eclipse下运行
<br /> 昨天在CMD下测试了LUCENE的DEMO,今天将其在eclipse上也成功运行,这样以后再debug就 <br /> 方便多了。<br /> 1.首先我解压lucene-2.3.1.zip到任意文件夹,我的是f:/lucene. 此时文件夹里必要文件夹是 f:/lucene/contrib,f:/lucene/src.确保这两个存在后其它的暂不顾及。 <br /> 2.在eclipse中新建工程File-new--javaProjec原创 2010-07-04 14:47:00 · 4135 阅读 · 1 评论 -
lucene索引结构分析
<br />Lucene是一个优秀的开源全文搜索项目,很多项目的搜索模块都是使用Lucene。<br />例如大名鼎鼎的eclipse的帮助系统就是使用的Luence作为起做索引的内核。<br />Lucene良好的体系结构使得其API接口非常方便易用,使得非自然语言处理的专业人员可以不用关心内部的索引结构,也可以很快的搭建起一个搜索引擎。但是对于高级用户和专业人员,了解其背后使用的索引结构也是必不可少的。 <br />在研究生阶段,我自己也弄了一个索引结构,好奇心促使我将Luence的索引结构和自己的索引原创 2010-07-08 09:41:00 · 5583 阅读 · 1 评论 -
Lucene系统结构分析
<br />Lucene作为一个优秀的全文检索引擎,其系统结构具有强烈的面向对象特征。首先是定义了一个与平台无关的索引文件格式,其次通过抽象将系统的核心组成部分设计为抽象类,具体的平台实现部分设计为抽象类的实现,此外与具体平台相关的部分比如文件存储也封装为类,经过层层的面向对象式的处理,最终达成了一个低耦合高效率,容易二次开发的检索引擎系统。<br />一、系统结构组织<br />Lucene作为一个优秀的全文检索引擎,其系统结构具有强烈的面向对象特征。首先是定义了一个与平台无关的索引文件格式,其次通过抽象原创 2010-07-08 09:46:00 · 1226 阅读 · 0 评论 -
lucene系统结构
<br />本文主要讨论Lucene的系统结构,希望对其结构的初步分析,更深入的了解Lucene的运作机制,从而实现对Lucene的功能扩展。<br /><!--[if !supportEmptyParas]--> <!--[endif]--><br /><!--[if !supportLists]-->1.<!--[endif]-->Lucene的包结构<br /><!--[if !supportEmptyParas]--> <!--[endif]--><br /><br /><!--[if !vml]<原创 2010-07-08 09:48:00 · 1533 阅读 · 0 评论 -
Lucene使用小结
<br />1. 搭建Lucene的开发环境:在classpath中添加lucene-core-2.9.1.jar包<br /> <br />2. 全文搜索的两个工作: 建立索引文件,搜索索引.<br /> <br />3. Lucene的索引文件逻辑结构<br /> 1) 索引(Index)由若干块(片段)(Segment)组成<br /> ★2) 块由若干文档(Document)组成: 一个文件映射成一个文档。数据库表中的一条记录映射成一个文档。<br /> ★3) 文档由若干域(Fiel原创 2010-07-09 16:27:00 · 1232 阅读 · 1 评论 -
term vectors
<br />Leveraging term vectors<br />所谓term vector, 就是对于documents的某一field,如title,body这种文本类型的, 建立词频的多维向量空间.每一个词就是一维, 这维的值就是这个词在这个field中的频率.<br />如果你要使用term vectors, 就要在indexing的时候对该field打开term vectors的选项:<br />Field options for term vectors<br />TermVector.YE原创 2010-07-14 14:10:00 · 1654 阅读 · 0 评论 -
有关Lucene的问题(6):Lucene的事务性
<br />所谓事务性,本多指数据库的属性,包括ACID四个基本要素:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 <br />我们这里主要讨论隔离性,Lucene的IndexReader和IndexWriter具有隔离性。 当IndexReader.open打开一个索引的时候,相对于给当前索引进行了一次snapshot,此后的任何修改都不会被看到。 仅当IndexReader.open打开一个索引后,才有可能看到从上次打开后原创 2010-07-16 15:18:00 · 642 阅读 · 0 评论 -
有关Lucene的问题(8):用Lucene构建实时索引的文档更新问题
<br />在有关Lucene的问题(7),讨论了使用Lucene内存索引和硬盘索引构建实时索引的问题。<br />然而有的读者提到,如果涉及到文档的删除及更新,那么如何构建实时的索引呢?本节来讨论这个问题。1、Lucene删除文档的几种方式<br /> IndexReader.deleteDocument(int docID)是用 IndexReader 按文档号删除。 IndexReader.deleteDocuments(Term term)是用 IndexReader 删除包含此词(Term)原创 2010-07-16 15:19:00 · 1186 阅读 · 0 评论 -
有关Lucene的问题(4):影响Lucene对文档打分的四种方式
在索引阶段设置Document Boost和Field Boost,存储在(.nrm)文件中。<br />如果希望某些文档和某些域比其他的域更重要,如果此文档和此域包含所要查询的词则应该得分较高,则可以在索引阶段设定文档的boost和域的boost值。<br />这些值是在索引阶段就写入索引文件的,存储在标准化因子(.nrm)文件中,一旦设定,除非删除此文档,否则无法改变。<br />如果不进行设定,则Document Boost和Field Boost默认为1。<br />Document Boost及F原创 2010-07-14 17:19:00 · 760 阅读 · 0 评论 -
有关Lucene的问题(3): 向量空间模型与Lucene的打分机制
在索引阶段设置Document Boost和Field Boost,存储在(.nrm)文件中。<br />如果希望某些文档和某些域比其他的域更重要,如果此文档和此域包含所要查询的词则应该得分较高,则可以在索引阶段设定文档的boost和域的boost值。<br />这些值是在索引阶段就写入索引文件的,存储在标准化因子(.nrm)文件中,一旦设定,除非删除此文档,否则无法改变。<br />如果不进行设定,则Document Boost和Field Boost默认为1。<br />Document Boost及F原创 2010-07-15 09:03:00 · 1174 阅读 · 0 评论 -
Lucene多线程操作实现
<br />1. 允许任意多的读操作并发,即任意数量用户可同时对同一索引做检索操作。<br />2. 即便正在进行索引修改操作(索引优化、添加文档、删除文档),依然允许任意多的检索操作并发执行。<br />3. 不允许并发修改操作,也就是说同一时间只允许一个索引修改操作。<br />Lucene内部已经对多线程安全进行了处理,很多操作都使用了 lock 进行多线程同步锁定。只要遵循一定的规则,就可以在多线程环境下安全运行 Lucene。<br />方案一:<br />建议:<br />1. Directot原创 2010-07-15 22:22:00 · 5870 阅读 · 1 评论 -
有关Lucene的问题(5):Lucene中的TooManyClause异常
<br />为什么会产生这个异常: 使用Lucene检索过程中如果用到RangeQuery,PrefixQuery,WildcardQuery,FuzzyQuer ... 为什么会产生这个异常: 使用Lucene检索过程中如果用到RangeQuery,PrefixQuery,WildcardQuery,FuzzyQuery这四种Query,可能会产生TooManyClauses异常。为什么会产生这个异常呢?举例说明: 以 RangeQuery为例,如果日期范围为19990101到200912原创 2010-07-16 15:17:00 · 637 阅读 · 0 评论 -
有关Lucene的问题(7):用Lucene构建实时的索引
<br />由于前一章所述的Lucene的事务性,使得Lucene可以增量的添加一个段,我们知道,倒排索引是有一定的格式的,而这个格式一旦写入是非常难以改变的,那么如何能够增量建索引呢?Lucene使用段这个概念解决了这个问题,对于每个已经生成的段,其倒排索引结构不会再改变,而增量添加的文档添加到新的段中,段之间在一定的时刻进行合并,从而形成新的倒排索引结构。<br />然而也正因为Lucene的事务性,使得Lucene的索引不够实时,如果想Lucene实时,则必须新添加的文档后IndexWriter需要c原创 2010-07-16 15:19:00 · 780 阅读 · 0 评论 -
lucene3.0分词原理和分词系统
<br />分词原理<br /><br />建立索引和查询的过程中,都是以基本的语素项为单位的。基本的语素项就是通过分词得到。这个过程决定了索引单元金额最终的匹配过程。<br />分词在文本索引的建立过程和用户提交检索过程中都存在。利用相同的分词器,把短语或者句子切分成相同的结果,才能保证检索过程顺利进行。<br />1、英文分词的原理<br />基本的处理流程是:输入文本、词汇分割、词汇过滤(去除停留词)、词干提取(形态还原)、大写转为小写、结果输出。<br />2、中文分词原理<br />中文分词比较复原创 2010-07-13 14:54:00 · 2724 阅读 · 1 评论 -
当前几个主要的Lucene中文分词器的比较
<br />1. 基本介绍:<br />paoding :Lucene中文分词“庖丁解牛” Paoding Analysis<br />imdict :imdict智能词典所采用的智能中文分词程序<br />mmseg4j : 用 Chih-Hao Tsai 的 MMSeg 算法 实现的中文分词器<br />ik :采用了特有的“正向迭代最细粒度切分算法“,多子处理器分析模式<br />2. 开发者及开发活跃度:<br />paoding :qieqie.wang, google code 上最后一次代码提原创 2010-07-13 14:55:00 · 842 阅读 · 0 评论 -
Lucene 源码剖析 九
<br />7 如何给文档评分<br /> <br />Similarity类负责给文档评分。<br /> <br />7.1 文档评分类Similarity<br />7.1.1 org.apache.lucene.search.Similarity<br />Similarity类实现算分(scoring)的API,它的子类实现了检索算分的算法。DefaultSimilarity类是缺省的算分的实现,SimilarityDelegator类是用于委托算分(原创 2010-07-08 17:09:00 · 1147 阅读 · 0 评论 -
Lucene 源码剖析 二 索引文件结构(1)
2 索引文件为了使用Lucene来索引数据,首先你得把它转换成一个纯文本(plain-text)tokens的数据流(stream),并通过它创建出Document对象,其包含的Fields成员容纳这些文本数据。一旦你准备好些Document对象,你就可以调用IndexWriter类的addDocument(Document)方法来传递这些对象到Lucene并写入索引中。当你做这些的时候,Lucene首先分析(analyzer)这些数据来使得它们更适合索引。详见《Lucene In Ac原创 2010-07-08 15:19:00 · 6633 阅读 · 0 评论 -
反向索引
<br />反向索引是一种索引结构,它存储了单词与单词自身在一个或多个文档中所在位置之间的映射。反向索引通常利用关联数组实现。它拥有两种表现形式:<br /><br />inverted file index,其表现形式为 {单词,单词所在文档的ID} <br />full inverted index,其表现形式为{单词,(单词所在文档的ID,在具体文档中的位置)} <br />具体实例,假设有三个文档:<br />T0 = "it is what it is" <br />T1 = "what is i原创 2010-07-02 15:40:00 · 1594 阅读 · 0 评论 -
Lucene入门与使用
<br /> 本文主要面向具体使用,适用于已熟悉java编程的lucene初学者。<br />1. Lucene的简介<br />1.1 Lucene 历史<br /> org.apache.lucene包是纯java语言的全文索引检索工具包。<br /> Lucene的作者是资深的全文索引/检索专家,最开始发布在他本人的主页上,2001年10月贡献给APACHE,成为APACHE基金jakarta的一个子项目。<br /> 目前,lucene广泛用于全文索引/检索的项目中。<原创 2010-07-04 15:49:00 · 900 阅读 · 0 评论 -
Lucene开发环境配置
step1.Java开发环境配置JAVA_HOME=C:/j2sdk1.4.2_04CLASSPATH=.;C:/j2sdk1.4.2_04/lib/tools.jar;C:/j2sdk1.4.2_04/lib/dt.jar;C:/j2sdk1.4.2_04/bin;path=C:/j2sdk1.4.2_04/binstep2.Tomcat安装环境变量的设置 ,其设置都在用户变量中,而且登陆的也是相应的用户。以下是用户变量中设置的路径:JAVA_HOME=E:/Java/jdk1.6path=%JAVA_H原创 2010-07-02 11:15:00 · 4212 阅读 · 0 评论 -
lucene全文检索实现流程
<br />对于lucene全文检索,可以简约地看看它的7个主要类,这7个类同时也表达了处理全文检索的7个意念。因为数据库比较为人所熟悉,它又与全文检索某些理念极为相似,所以在对下面的概念说明时,将会大量在渗入数据库和全文检索间的类比。 <br />1)Document :它的中文意思是文档,对于一个文档,通常都包括它的标题、时间、作者、内容。如果让它的意思泛化,它也有文件的意思(相信Lucene的作者在取这个类名的时候也是经过再三斟酌的),对于文件,它可以指一个TXT文本、一个HTML网页、一个PDF文件原创 2010-07-02 16:41:00 · 1081 阅读 · 0 评论 -
Lucene 研究:文件存储
<br />Term:项。为分词后最小单位,具体和使用的分析器有关,Lucene内置为单字。<br />Field:域。相当于数据库表的字段。<br />Document:文档。域信息的集合。<br />Segment:段。一个完整定1索引。<br /> <br /><br />文件名称<br />后缀名称<br />说明<br />segments_N<br /> <br />段,表示一个完整独立的索引;N为36进制数<br />segments<br />.gen<br />segments辅助文件,主原创 2010-07-07 11:47:00 · 992 阅读 · 0 评论 -
从lucene的文件结构看它的性能
<br /> Lucene是一个apache项目,完全使用java语言编写(废话,谁都知道apache主要是做java项目的,不过,已经有人对Lucene进行了迁移,比如CLucene),它提供了一个基本的索引文档后进行搜索的功能。目前版本是2.0,具体信息可以直接看http://lucene.apache.org/官方网站。同时,http://www.lucene.com.cn/about.htm提供了一个很不错的介绍(同时介绍了CLucene项目)。<br /> 本文不打算介绍它的使用,因为它的使原创 2010-07-08 09:25:00 · 1220 阅读 · 1 评论 -
Lucene索引文件格式分析
<br /> 一、 Lucene源码实现分析的说明<br /> 通过以上对Lucene系统结构的分析,我们已经大致的清楚了Lucene系统的组成,以及在Lucene系统之上的开发步骤。接下来,我们试图来分析Lucene项目(采用Lucene 1.2版本)的源码实现,考察其实现的细节。这不仅仅是我们尝试用C++语言重新实现Lucene的必须工作,也是进一步做Lucene开发工作的必要准备。因此,这一部分所涉及到的内容,对于Lucene上的应用开发也是有价值的,尤其是本部分所做的文件格式分析。<b原创 2010-07-08 09:39:00 · 2613 阅读 · 0 评论 -
Lucene 源码剖析 三 索引文件结构(2)
3.3 每个Segment包含的文件剩下的文件(remaining files)都是per-segment(每个片断文件),因此(thus)都用后缀来定义(defined by suffix)。 3.3.1Fields域数据文件 3.3.1.1 Field信息(.fnm)Field的名字都存储在Field信息文件中,后缀是.fnm。 文件包含的项数目类型版本描述FieldsInfo(.fnm) FieldsCount1VIntFieldNameFieldsCount原创 2010-07-08 16:06:00 · 1661 阅读 · 0 评论 -
Lucene源代码剖析 四 索引文件结构(3)
3.3 每个Segment包含的文件剩下的文件(remaining files)都是per-segment(每个片断文件),因此(thus)都用后缀来定义(defined by suffix)。 3.3.1Fields域数据文件 3.3.1.1 Field信息(.fnm)Field的名字都存储在Field信息文件中,后缀是.fnm。 文件包含的项数目类型版本描述FieldsInfo(.fnm) FieldsCount1VIntFieldNameFieldsCountSt原创 2010-07-08 16:24:00 · 1724 阅读 · 0 评论 -
Lucene 源码剖析 八
<br />5 索引是如何存储的<br /> <br />5.1 数据存储类Directory<br /> <br /> Directory及相关类负责文档索引的存储。<br /> <br /> <br />5.1.1 org.apache.lucene.store.Directory<br /> <br />一个Directory对象是一系列统一的文件列表(a flat list of files)。文件可以在它们被创建的时候一次原创 2010-07-08 17:08:00 · 1269 阅读 · 0 评论 -
索引过程和搜索过程
索引过程如下: 创建一个IndexWriter 用来写索引文件,它有几个参数,INDEX_DIR 就是索引文件所存放的位置,Analyzer 便是用来对文档进行词法分析和语言处理的。 创建一个Document 代表我们要索引的文档。 将不同的Field 加入到文档中。我们知道,一篇文档有多种信息,如题目,作者,修改时间,内容等。不同类型的信息用不同的Field 来表示,在本例子中,一共有两类信息进行了索引,一个是文件路径,一个是文件内容。其中FileReader 的SRC_FILE 就表示要索引的源文原创 2010-07-05 17:19:00 · 1427 阅读 · 0 评论 -
Lucene里经常被聊到的几个话题
<br />1、索引及搜索的概念<br />将原始数据处理成一个高效的交差引用的查找结构以便于快速的搜索。索引结构是指快速随机访问存于其内部的关键词的数据结构。<br />搜索是在一个索引中查找单词来找出它们所出现的文档的过程。支持单个和多个词汇的查询,短语查询,通配符,结果分级和排序。<br /><br />2、lucene的核心类<br />核心索引类<br />IndexWriter唯一能写索引的类 索引的写入和索引的整体的维护 合并,优化 <br />Analyzer:分析文本内容,提取关键字 <b原创 2010-07-07 17:06:00 · 840 阅读 · 0 评论 -
Lucene 源码剖析 一 索引文件概述
1 Lucene是什么Apache Lucene是一个高性能(high-performance)的全能的全文检索(full-featured text search engine)的搜索引擎框架库,完全(entirely)使用Java开发。它是一种技术(technology),适合于(suitable for)几乎(nearly)任何一种需要全文检索(full-text search)的应用,特别是跨平台(cross-platform)的应用。Lucene 通过一些简单的接口(simpl原创 2010-07-08 15:08:00 · 3377 阅读 · 0 评论 -
Lucene 源码剖析 五 索引文件结构(4)
3.3.6Term向量文件Term向量(vector)的支持是field基本组成中对一个field来说的可选项,它包含如下4种文件: 1. 文档索引或.tvx文件:对每个文档来说,它把偏移(offset)存储进文档数据(.tvd)文件和域field数据(.tvf)文件 版本包含的项数目类型描述全部版本TVXVersion1Int在Lucene 2.4中为3 (TermVectorsReader.FORMAT_VERSION2)DocumentPositionNum原创 2010-07-08 16:31:00 · 2092 阅读 · 0 评论 -
Lucene 源码剖析 七
4.3 索引创建过程 文档的索引过程是通过DocumentsWriter的内部数据处理链完成的,DocumentsWriter可以实现同时添加多个文档并将它们写入一个临时的segment中,完成后再由IndexWriter和SegmentMerger合并到统一的segment中去。DocumentsWriter支持多线程处理,即多个线程同时添加文档,它会为每个请求分配一个DocumentsWriterThreadState对象来监控此处理过程。处理时通过DocumentsWrite原创 2010-07-08 17:03:00 · 1479 阅读 · 0 评论 -
有关Lucene的问题(2):stemming和lemmatization
问题:<br />我试验了一下文章中提到的 stemming 和 lemmatization 将单词缩减为词根形式,如“cars”到“car”等。这种操作称为:stemming。 将单词转变为词根形式,如“drove”到“drive”等。这种操作称为:lemmatization。 <br />试验没有成功 <br />代码如下:<br />public class TestNorms { <br /> public void createIndex() throws IOException {原创 2010-07-14 15:04:00 · 809 阅读 · 0 评论