`
isiqi
  • 浏览: 16485577 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

关于lucene断点续索引和增量索引的问题

阅读更多
关于lucene断点续索引和增量索引的问题
1、 像百度、google等桌面搜索建立索引的时候可以停止后重新索引,他能保证以前索引过的文件重新索引的时候不用再索引吗?如果停止后要索引的文件进行了 删除和添加等操作,那么他是怎么处理的以保证索引文件的覆盖率。用lucene索引文件的时候如何实现这种功能,给个思路。

2、如何在我 给一个目录里添加一个文件的时候自动把这个文件用lucene索引起来,就是所谓的增量索引,难道用个timer扫描目录变化或者用filewatch来 监视这个目录,然后对其索引吗?可是这样的话必须做个windows服务了,要不这个软件关闭的话就不能相应目录里文件的变化了。

3、如果一个文件修改或者删除了,如何同步到索引里,用IndexReader找这个Document的时候考什么去找,必须要在Document里放一个类似于主键的域来找到它,并删除或者重新建立索引吗?

就这3问题,大家给说说思路,谢谢。
回复人:onlytiancai(谁染枫林醉) ( 四级(中级)) 信誉:80 2007-3-27 13:37:44 得分:0
?

关于lucene断点续索引和增量索引的问题
1、 像百度、google等桌面搜索建立索引的时候可以停止后重新索引,他能保证以前索引过的文件重新索引的时候不用再索引吗?如果停止后要索引的文件进行了 删除和添加等操作,那么他是怎么处理的以保证索引文件的覆盖率。用lucene索引文件的时候如何实现这种功能,给个思路。

2、如何在我 给一个目录里添加一个文件的时候自动把这个文件用lucene索引起来,就是所谓的增量索引,难道用个timer扫描目录变化或者用filewatch来 监视这个目录,然后对其索引吗?可是这样的话必须做个windows服务了,要不这个软件关闭的话就不能相应目录里文件的变化了。

3、如果一个文件修改或者删除了,如何同步到索引里,用IndexReader找这个Document的时候考什么去找,必须要在Document里放一个类似于主键的域来找到它,并删除或者重新建立索引吗?

就这3问题,大家给说说思路,谢谢。
-----------------
判断索引目录的segments文件是否存在,
如果存在,用增量索引
否则, 重新创建索引


如果是重新创建索引
只需要遍历需要索引的内容,然后新增文档

如果是增量索引
判断主Key[文件名(包含全路径)]在索引中是否存在
如果存在
判断[文件的修改时间],是否和索引中保存的[修改时间]一致
如果不一致
删除旧的索引中的该索引项目
新增对该文档的索引
否则
新增该文档的索引

缺点,不能发现已经删除的文件,当然是认为的去某个目录删除该文件。
如果是程序的话当然是可以的,只需要把索引中的项目删除。


CodeProject上面的http://www.codeproject.com/csharp/DesktopSearch1.asp

使用微软的IndexService,需要win2000或者win2000以上的版本。

缺点,好像这些函数在处理 修改word一点点内容之后,算法会有一些问题,如果重新编制索引,又不会出现:( 不知道是不是我做错了。
-------------------
用lucene为数据库搜索建立增量索引
http://www.cnblogs.com/maxwolf/archive/2005/10/25/262034.html
------------------
lucene中增量索引的方法!
http://javaeyes.javaeye.com/blog/30959
-------------------
海量数据的管理及增量索引(全文检索系统)
对 于分布式的全文检索系统,海量数据的管理与增量索引策略显得尤为重要,因为很多用户时时地对数据进行检索,而后台又有多个子系统在时时地往总库写数据,而 各客户端需要对添加到库里的数据实时地查询到。而对于全文检索系统用户查询到的提前必须对入到库里的数据进行索引,这样用户才能看到数据。而且每天的数据 量多的时候可能有好几十万条,每一条数据基本上都是在70K以上,因为好几个字段都是全文字段。这让我在设计方案时颇费心计呀。最终我的方案出来了,程序 也基本上写好了,不过效率如何还得测试测试。我的方案大致如下:(用的是CNKI的全文检索数据库系统KBase)
1、使用联合表的思想将多个物理上独立的表在逻辑上统一起来
2、联合表由年表、月表、日表组成。
3、每日晚上12点将上一天的日表合并到月表中去,并做索引
4、每月月初将上一月的月数据合并到当年年表中去,并索引
5、第3 步是一个可选项,也可以是在月未对所有当月的月数据进行合并,并做一次索引
6、第4步也可以是到年底对一年的月数据进行一次合并,并做一次索引
对 于KBase系统来说这是一个比较好的方案,但若KBase能支持嵌套的联合表和可更新的视图就好了,这样对于月表不需要合并,只需要再建一个联合表或者 视图即可,目前的视图由于只能查询,而不能将修改更新回去。而且对于这种系统月表的数据粒度也是比较适中的一个数据级。这样可提高系统的效率,另外加上并 行表的支持,这样可以将数据分散到不同的机器上,而由一个视图或者联合表统一管理。这是一种最优的方法,但需要KBase进行一定的改进。
--------------------
主题: 关于lucene文件锁和增量索引BUG的讨论。
http://www.javaeye.com/post/225074
-------------------
通过dotLucene实现增量索引.
http://xiaohui.cnblogs.com/archive/2004/10/23/55715.aspx
---------------------
全文检索系统中海量数据的增量索引
全 文检索系统中如果每天处理至少10多万条的文本数据,那么如何对这些新增加的数据进行增量索引并进行有效地管理是整个系统的关键。通过采用联合表或者并行 表的方式来管理这些数据,但是每一个并行表的粒度应该设多大,设多少个子表或者并并行表都需要系统的应用规模来定。如果并行表的粒度过大,即使是在索引过 程中采用的是拉链索引的方式来组织索引数据,也是需要大量的索引数据的遍历,若不是拉链更需要索引数据的大量移动来进行索引合并,进而严重影响系统性能。 但是如果数据粒度过小,这样子表会很多,这样在检索时会影响到检索的性能,因为需要查询很多个子表才能返回结果。而如果对子表定期地合并,这样在合并的次 数也会大大增加,合并完后还需要作一次整体索引。所以设计子表粒度和子表的个数时需要慎重考虑,根据自己系统的实际情况而定。
--------------------
关于lucene中增量索引的问题
Draem 2006-09-05 23:16
为 什么我将IndexWriter的第三个参数改为false后,还是会重新索引而不是做增量索引呢?IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(), false);也许已经是做的增量索引,但我好象没发觉有什么差别,比如说速度变快。增量索引是不是指之前已经建立了索引的文件就不再建立索引呢?


旋风小子 1970-01-01 08:00
对于增量索引,Nutch从架构设计得以解决的比如:利用目录的不同,保存不同的数据segments/20****目录这样在检索时就可以持续增量.
--------------------
lucene是支持增量索引的,但是我在index上用indexWriter的addDocument(Document)之后,用IndexReader,不能搜索到新增的Document的内容的?
先关闭indexwrite,关闭之后才能讲Document写入到索引文件中
----------------------

先用我现在的真实项目作为环境给大家介绍一下:30万左右的纪录数,几十人不停的在维护这些纪录,索引的建立方式我采用了8个小时一次全量索引、20分钟 一次增量索引,之所以跑的这么频繁,是希望能保持一定的实时性(增量)和准确性(全量),索引存放的目录加一个整型的数字作为文件夹名称,每一次新的全量 索引的建立都用一个大一位的整数存放,等索引建完后自动切换到新的索引文件进行检索。以上这些就是大致的情况,下面分别讨论标题提到的两个问题:
1、文件锁。
每次全量索引的文件大小大概为130M,每次增量索引大概增加一倍,一段时间后索引文件的大小非常可观,由于每次新的全量索引会重新建立一个目录,故采用 自动删除旧的目录方式,但是被使用过的旧的索引文件却无法删除,即使使用了IndexReader的unclock方法也不行,不知道大家有没有遇到过这 种情况。
2、增量索引的BUG。
lucene利用IndexWriter(dir, analysis, false)中的最后一个参数设置不清空目录来创建增量索引,在修改的时候其实原理类似于我上面创建新的全量索引的方式,但是切换的时间不一样,我是在新 的索引完成后切换,但是lucene是在一开始就切换,这样就会造成修改的数据量如果很大,在修改的期间检索出来的结果非常不稳定,我觉得这应该是一个逻 辑上的BUG,不知大家认为如何。

他应当是有做optimize的,只是因为他说

“被使用过的旧的索引文件却无法删除”

应该是还有程序在使用里面的索引文件,在切换点上没有进行完全的close或者close没有真正完成,是否考虑延时close与删除,然后先删除目录里的文件,再去试着删除目录。

另外,我想知道你动态切换的时间点是什么,具体说说,如何应对并发呢?


你好,我也是做lucene搜索的,目前项目遇到的情况跟你的那种状况很类似,我们目前的索引数量有50万,每10分钟更新一次,每次都会有新增2000 条,整个索引文件有几百M了,全量更新一次要花1个小时,预见未来的数据规模会达到百万级别。你的帖子有个回复提到Compass,我查了一下,感觉听适 合我们的需求的,主要是对象索引映射实现的实时更新很诱人:),不知道你那边情况怎么样,用Compass好使否?索引性能怎么样?
我的msn:emmetxu@hotmail.com 非常有兴趣和你聊聊 ,谢了。



我最近也在做lucene,关于增量索引是挺让人头疼,我觉得lucene这个增量索引做的不尽人意,每一次增量它本身不会判断重复的索引,相当于在原来 的基础上又做了一次全量索引,当然少了一步清空目录的操作,关于增量索引,自己还要做判断,每一次的循环addDocument()要判断原索引中是否存 在重复的索引,如果是还要判断文件最后的修改时间是否跟索引的最后修改时间相匹配!不匹配删除掉,把新的添加到索引中.关键问题是如何判断文件的主KEY (文件名和路径)索引中是否存在!!这个也是我一直没有解决掉的,看了一下LUCENE的底层代码并没有提供这样的接口供调用!迷惑,如果哪位仁兄有好的 方法希望一起探讨,赐教!

分享到:
评论

相关推荐

    基于lucene技术的增量索引

    **基于Lucene技术的增量索引** 在信息技术领域,全文搜索引擎是处理大量数据查询的关键工具。Apache Lucene是一个开源的全文检索库,被广泛应用于构建高效、可扩展的搜索功能。本文将深入探讨如何利用Lucene实现...

    Lucene5学习之增量索引(Zoie)

    Lucene本身并不直接支持增量索引,因此,开发者们开发了Zoie系统,它是基于Lucene的一个扩展,旨在解决大数据量场景下的实时索引问题。Zoie的名字来源于“Zero Indexing Overhead”,即零索引开销,它的核心思想是...

    Lucene之删除索引

    了解了这些基本原理后,我们可以通过阅读提供的链接(http://blog.csdn.net/nupt123456789/article/details/10666105)获取更多关于Lucene删除索引的实战技巧和注意事项。同时,`HelloLucene_delete`这个压缩包文件...

    关于lucene建立数据库索引的更新说明

    在本文中,我们将探讨如何使用Lucene建立数据库索引,并分享一些在实践过程中的经验和教训。Lucene是一个高性能、全文本搜索库,广泛用于构建搜索引擎。在创建索引时,需要注意以下关键点: 1. **资料的准确性**:...

    Lucene3.0创建索引

    在Lucene3.0中创建索引是一个关键功能,可以帮助用户快速地检索和管理大量的文本数据。本篇文章将详细介绍如何使用Lucene3.0来创建索引,并通过一个具体的例子来演示整个过程。 #### 一、Lucene3.0简介 Lucene是一...

    lucene分词搜索,增量索引及全量索引

    本文将深入探讨Lucene的分词搜索、增量索引和全量索引的概念及其在实际应用中的实现方法。 一、Lucene分词搜索 Lucene的搜索功能基于分词技术。分词是将文本拆分成可搜索的独立单元,称为“词语”或“token”。...

    lucene全文检索简单索引和搜索实例

    总结,Lucene作为一款强大的全文检索库,其核心在于索引的创建和搜索的执行。通过理解其基本概念和操作流程,开发者可以灵活地构建符合需求的全文检索系统。在实际应用中,我们还需要关注性能优化、查询复杂性和用户...

    Lucene 删除 合并索引

    Lucene 删除 合并索引,可以指定几个索引文件合并成一个索引文件。自己写的,有很多不足之处请多指教

    Lucene 索引的简单使用

    以上就是关于“Lucene索引的简单使用”的详细介绍,包括其核心概念、创建和查询索引的步骤以及一些高级特性。希望对你理解和应用Lucene有所帮助。在实际开发中,可以根据需求选择合适的Analyzer,优化索引策略,以...

    lucene实现索引查询

    以下是关于使用Lucene实现索引查询的详细知识: ### 一、创建索引 创建索引是Lucene的核心过程,它涉及到以下步骤: 1. **定义索引目录**:首先,你需要指定一个目录来存储索引文件。这通常是一个文件夹,可以...

    Lucene索引和查询

    **Lucene索引和查询** Lucene是Apache软件基金会的开放源码全文搜索引擎库,它提供了文本检索的核心工具,使得开发者能够快速构建自己的搜索应用。本项目中的代码旨在展示如何利用Lucene对多个文件夹下的数据进行...

    lucene 对 xml建立索引

    ### Lucene对XML文档建立索引的技术解析与实践 #### 一、引言 随着互联网技术的迅猛发展,非结构化数据(如...在未来的发展中,随着数据量的不断增加和技术的进步,Lucene对XML文档的索引建立将会更加高效和智能化。

    Lucene索引器实例

    doc.add(new Field("content", "这是关于Lucene索引器的一个实例教程。", Field.Store.YES, Field.Index.ANALYZED)); // 添加文档 indexWriter.addDocument(doc); // 关闭索引器 indexWriter.close(); } }...

    lucene.net 2.9.2 实现索引生成,修改,查询,删除实例

    在这个实例中,我们将深入探讨如何使用Lucene.NET 2.9.2来实现索引的生成、修改、查询和删除。 **一、索引生成** 首先,我们需要创建一个索引,这是全文检索的基础。在Lucene.NET中,我们通常会定义一个文档类,...

    luke8用于查看lucene保存的索引库数据和文档数据

    - **调试工具**:在开发和维护过程中,luke8能帮助定位索引问题,如缺失字段、错误的分词结果等。 **3. luke8的特性** - **多语言支持**:luke8支持多种语言的分词,包括中文、英文等,可以查看不同语言环境下索引...

    lucene索引结构原理

    理解Lucene的索引结构原理对于优化搜索性能和设计高效的搜索应用至关重要。 首先,我们要知道Lucene的索引并非数据库中的那种可以立即定位数据的索引,而是用于快速查找文档中包含特定单词的索引。这个过程分为以下...

    Lucene读取索引文件

    一个Lucene索引是由多个文件组成的,包括但不限于 segments文件、.del文件(删除文档标记)、.tii和.tis文件(Term Info Index和Term Info postings)、.frx、.fdx、.fdt、.fdt(Field Data)等。这些文件共同构成了...

    lucene5+zoie实现近实时索引

    本篇文章将详细介绍如何利用Lucene 5和Zoie来构建一个能够实现实时或近实时索引更新的系统。 一、Lucene 5:全文搜索引擎的基石 Lucene是一款开源的Java库,它提供了高性能、可扩展的文本搜索功能。在Lucene 5版本...

    lucene索引查看程序及代码

    luke是一款开源的Lucene索引查看器,它允许用户以图形化界面的形式查看和操作Lucene索引。lukeall-0.8.1.jar是luke的运行文件,通过运行这个JAR文件,我们可以直接在Java环境中启动luke应用,进行索引的查看和分析。...

Global site tag (gtag.js) - Google Analytics