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()方法打开,看它文档上说明是只加载更新了的索引文件,这样就不用全部重新打开了,时间主要耗在这里, 如果判断结果是没有更新则直接返回那个实例就行了 我是这样做的.我现在一值在想怎样实时,头痛 |