Lucene实现实时搜索探讨【入门的讨论】

licco1 2007-09-06
在做一个网站站内搜索中,使用lucene实现实时搜索时,我遇到了一对矛盾:在使用一个IndexSearcher单例时,搜索的效率极高,但是在indexSearcher实例新建后新增的索引,这个单例是不可见的,除非我定时的去触发将这个IndexSearcher重新建一次,否则就不能搜索出最新的信息。假如我每来一个 request,就新建一个IndexSearcher实例,则可以搜索出最新的信息,但是,效率非常低。不知道大家有什么好的策略或插件,提出来讨论讨论。(我现在的策略是定时的reopen下insexSearcher)
imjl 2007-09-10
看下commit,optimize。

guoyi 2007-09-10
看了,还是没找到解决办法,二楼能不能说详细点?
abu 2007-09-17
licco1 写道
假如我每来一个 request,就新建一个IndexSearcher实例,则可以搜索出最新的信息,但是,效率非常低。不知道大家有什么好的策略或插件,提出来讨论讨论。(我现在的策略是定时的reopen下insexSearcher)

个人认为不应该使用定时reopen策略。这样有两点不好:
(1)如果索引更新较快,定时的reopen也不能解你所提出的问题---搜索不出最新的信息(在你两次reopen之间新添加的信息也是搜索不到的)。
(2)如果索引更新较慢,定时的reopen也是显得效率低。因为索引没有变也不停地去reopen。

可以使用这样的策略:
使用一个独立的线程去维护这个IndexSearcher,当索引有更新时,记录下索引已更新;当有request时,先去检验一下索引是否有更新,有则reopen后再查,无则直接查。

这是一个比较简单的策略,其实还可以将其完善,如在reopen的触发上,或可以使用多索引文件等......
具体情况,具体分析。^_^
ryq1 2007-09-24
把你是否更新了索引放入Application中。这样就可以来操作了吧。
我现在是每次都重新打开一个。

不过我遇的问题是:效率很低。整得极其郁闷。有时要1-2秒。还有的要5秒。
roki 2007-09-25
临时加出来的文件,做进内存索引,然后定期合并,行吗?
imjl 2007-10-08
ryq1 写道
把你是否更新了索引放入Application中。这样就可以来操作了吧。
我现在是每次都重新打开一个。

不过我遇的问题是:效率很低。整得极其郁闷。有时要1-2秒。还有的要5秒。



把你的步骤和数据规模,运行环境,机器配置,用普通话描述下。。。不要上code。
edwardpro 2007-10-25
最简单的方法,用timer定时生成下indexSearcher,全文引擎有略微的延时也是可以接受的。
txzyhm521 2007-10-30
改了,没感觉到比原来快.......
RegJfdJavaEye 2008-09-09
用2.3的包,有一个reopen()的方法,
每一次reopen前可以先判断一下是不是当前的索引文件,主要看有没有更新,
如果有更新,用reopen()方法打开,看它文档上说明是只加载更新了的索引文件,这样就不用全部重新打开了,时间主要耗在这里,
如果判断结果是没有更新则直接返回那个实例就行了
我是这样做的.我现在一值在想怎样实时,头痛
Global site tag (gtag.js) - Google Analytics