Skip to content

{ Category Archives } LUCENE

lucene 2.4.1 重建索引测试

机器配置: uname -a : Linux eshequn-SV06-A11 2.6.21.5-smp #1 SMP Sun Jan 27 23:51:02 CST 2008 i686 Intel(R) Xeon(TM) CPU 3.06GHz GenuineIntel GNU/Linux cpuinfo: processor        : 2 model name    : Intel(R) Xeon(TM) CPU 3.06GHz meminfo: MemTotal:      6234308 kB disk info: /dev/sda1 on / type reiserfs (rw,noatime) lucene 配置 writer = new IndexWriter(indexDir, paodingAnalyzer, true, IndexWriter.MaxFieldLength.UNLIMITED); [...]

Lucene 重建索引流程设计(草稿)

一. php client 端: 1. update 与 rebuild 分开 2. update 准实时:insert,update,delete 实时调用更新索引接口(带 primery key 的update 和 delete) 3. rebuild 使用命令行或者 cron 运行,不能使用 web 页面(有运行时间限制),但可以在后台管理系统中作触发(如何防止重复触发?) 二. Java IndexServer:(接受 client 发过来的数据,输出为临时 xml 文件) 1. 日常 update 的 xml 临时文件可以考虑保存在内存文件系统中(保留最近n天的文件debug使用) 2. 更多的处理过程 log (debug 使用,日常监控使用) 3. rebuild 的 xml 临时文件一定要保存在内存文件系统中 4. xml 文件按年或月分目录 5. rebuild 的过程中,update 数据需要为新索引保留一份,等 [...]

Lucene研究之二——系统结构分析初步

转载自 http://www.jalorsoft.com/holen/holen_lucene_02.html 作者:陈光(holen@263.net) 时间:2004-08-26 本文主要讨论Lucene的系统结构,希望对其结构的初步分析,更深入的了解Lucene的运作机制,从而实现对Lucene的功能扩展。 1. 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 一些公用类 2. Lucene的主要逻辑图 Lucene功能强大,但从根本上说,主要包括两块:一是文本内容经切词后索引入库;二是根据查询条件返回结果。 以下是上述两大功能的逻辑图: 查询逻辑 按先后顺序,查询逻辑可分为如下几步: 1.  查询者输入查询条件 条件之间可以通过特定运算符进行运算,比如查询希望查询到与“中国”和“北京”相关的记录,但不希望结果中包括“海淀区中关村”,于是输入条件为“中国+北京-海淀区中关村”; 2.  查询条件被传达到查询分析器中,分析器将将对“中国+北京-海淀区中关村”进行分析,首先分析器解析字符串的连接符,即这里的加号和减号,然后对每个词进行切词,一般最小的词元是两个汉字,则中国和北京两个词不必再切分,但对海淀区中关村需要切分,假设根据切词算法,把该词切分为“海淀区”和“中关村”两部分,则最后得到的查询条件可以表示为:“中国” AND “北京” AND NOT(“海淀区” AND “中关村”)。 3.  查询器根据这个条件遍历索引树,得到查询结果,并返回结果集,返回的结果集类似于JDBC中的ResultSet。 4.  将返回的结果集显示在查询结果页面,当点击某一条内容时,可以链接到原始网页,也可以打开全文检索库中存储的网页内容。 这就是查询的逻辑过程,需要说明的是,Lucene默认只支持英文,为了便于说明问题,以上查询过程采用中文举例,事实上,当Lucene被扩充支持中文后就是这么一个查询过程。 入库逻辑 入库将把内容加载到全文检索库中,按顺序,入库逻辑包括如下过程: 1.  入库者定义到库中文档的结构,比如需要把网站内容加载到全文检索库,让用户通过“站内检索”搜索到相关的网页内容。入库文档结构与关系型数据库中的表结构类似,每个入库的文档由多个字段构成,假设这里需要入库的网站内容包括如下字段:文章标题、作者、发布时间、原文链接、正文内容(一般作为网页快照)。 2.  包含N个字段的文档(DOCUMENT)在真正入库前需要经过切词(或分词)索引,切词的规则由语言分析器(ANALYZER)完成。 3.  切分后的“单词”被注册到索引树上,供查询时用,另外也需要也其它不需要索引的内容入库,所有这些是文件操作均由STORAGE完成。 [...]

Lucene研究之一——起源、现状及初步应用

转载自 http://www.jalorsoft.com/holen/holen_lucene_01.html 本文是Lucene研究文集的首篇,主要介绍了Lucene的起源、发展、现状,以及Luence的初步应用,可以作为了解和学习Lucene的入门资料。 1. 起源与发展 Lucene是一个高性能、纯Java的全文检索引擎,而且免费、开源。Lucene几乎适合于任何需要全文检索的应用,尤其是跨平台的应用。 Lucene的作者Doug Cutting是一个资深的全文检索专家,刚开始,Doug Cutting将Lucene发表在自己的主页上,2000年3月将其转移到sourceforge,于2001年10捐献给Apache,作为Jakarta的一个子工程。 2.使用现状 经过多年的发展,Lucene在全文检索领域已经有了很多的成功案例,并积累了良好的声誉。 基于Lucene的全文检索产品(Lucene本身只是一个组件,而非一个完整的应用)和应用Lucene的项目在世界各地已经非常之多,比较知名的有: l         Eclipse:主流Java开发工具,其帮助文档采用Lucene作为检索引擎 l         Jive:知名论坛系统,其检索功能基于Lucene l         Ifinder:出自德国的网站检索系统,基于Lucene(http://ifinder.intrafind.org/) l         MIT DSpace Federation:一个文档管理系统(http://www.dspace.org/) 国内外采用Lucene作为网站全文检索引擎的也很多,比较知名的有: l         http://www.blogchina.com/weblucene/ l         http://www.ioffer.com/ l         http://search.soufun.com/ l         http://www.taminn.com/ (更多案例,请参见http://wiki.apache.org/jakarta-lucene/PoweredBy) 在所有这些案例中,开源应用占了很大一部分,但更多的还是商化业产品和网站。毫不夸张的说,Lucene的出现,极大的推动了全文检索技术在各个行业或领域中的深层次应用。 3.初步应用 前面提到,Lucene本身只是一个组件,而非一个完整的应用,所以若想让Lucene跑起来,还得在Lucene基础上进行必要的二次开发。 下载与安装 首先,你需要到Lucene的官方网站http://jakarta.apache.org/lucene/ 去下载一份拷贝,最新版是1.4。下载后将得到一个名为lucene-1.4-final.zip的压缩文件,将其解压,里面有一个名为lucene-1.4-final.jar的文件,这就是Lucene组件包了,若需要在项目使用Lucene,只需要把lucene-1.4-final.jar置于类路径下即可,至于解压后的其他文件都是参考用的。 接下来,我用Eclipse建立一个工程,实现基于Lucene的建库、记录加载和记录查询等功能。 如上图所示,这是开发完成后的工程,其中有三个源文件CreateDataBase.java,InsertRecords.java,QueryRecords.java,分别实现建库、入库、检索的功能。 以下是对这三个源文件的分析。 建库源码及说明 CreateDataBase.java package com.holen.part1; import java.io.File; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.index.IndexWriter; /** * @author Holen [...]