[lucene] 杯具了 关于IndexSearcher的使用
illu
2010-02-23
以前记得看过几篇博文说
IndexReader 只需要打开一个 而IndexSearcher 每次查询都可以new一个, new的参数是IndexReader即可 但是今天无意中翻看API发现 public class IndexSearcher extends Searcher Implements search over a single IndexReader. Applications usually need only call the inherited Searcher.search(Query) or Searcher.search(Query,Filter) methods. For performance reasons it is recommended to open only one IndexSearcher and use it for all of your searches. 原来提高性能的话 用一个IndexSearcher即可。。 想问下大家的应用在查询时是怎么做的, 关于IndexSearcher这部分 ![]() |
|
illu
2010-02-24
更杯具的是 居然没有银回复。。。
![]() |
|
deepfuture
2010-02-24
http://deepfuture.iteye.com/blog/573706
lucene-多字段、多索引搜索与多线程搜索 这个是不是你要的 |
|
luckaway
2010-02-24
哈哈,是我说的。这篇文章我早就发现了
IndexSearcher缓存下来也是可以的,就是IndexSearcher没有判断是否有新的索引生成的api。 另IndexSearcher你可以去查看源代码,其实new一个不会耗很多资源的。 |
|
illu
2010-02-25
deepfuture 写道 http://deepfuture.iteye.com/blog/573706
lucene-多字段、多索引搜索与多线程搜索 这个是不是你要的 不是这个问题 主要是IndexSearcher或者IndexReader的维护问题 |
|
illu
2010-02-25
luckaway 写道 哈哈,是我说的。这篇文章我早就发现了
IndexSearcher缓存下来也是可以的,就是IndexSearcher没有判断是否有新的索引生成的api。 另IndexSearcher你可以去查看源代码,其实new一个不会耗很多资源的。 我原来是这样做的 建立索引 和 查询是两个应用 建立索引这边负责索引的重建和增量索引 查询就需要定时的对IndexReader进行reopen IndexSearcher 来一个线程就new一个 现在想的是IndexReader的维护不变 而把IndexSearcher池化 比如一共维护5个IndexSearcher 然后定时创建新的IndexSearcher 因为IndexReader是定时reopen的 这样才能检索的新的信息 然后把新建的IndexSearcher放入池中 移除池中一个最老的IndexSearcher 延迟后关闭 每次调用IndexSearcher池得到IndexSearcher时 返回的是最新的IndexSearcher |
|
luckaway
2010-02-25
illu 写道 luckaway 写道 哈哈,是我说的。这篇文章我早就发现了
IndexSearcher缓存下来也是可以的,就是IndexSearcher没有判断是否有新的索引生成的api。 另IndexSearcher你可以去查看源代码,其实new一个不会耗很多资源的。 我原来是这样做的 建立索引 和 查询是两个应用 建立索引这边负责索引的重建和增量索引 查询就需要定时的对IndexReader进行reopen IndexSearcher 来一个线程就new一个 现在想的是IndexReader的维护不变 而把IndexSearcher池化 比如一共维护5个IndexSearcher 然后定时创建新的IndexSearcher 因为IndexReader是定时reopen的 这样才能检索的新的信息 然后把新建的IndexSearcher放入池中 移除池中一个最老的IndexSearcher 延迟后关闭 每次调用IndexSearcher池得到IndexSearcher时 返回的是最新的IndexSearcher 恩,这样性能肯定会稍微好点! 不过IndexSearcher没必要专门写个类去管理,直接放到缓存就可以了。若缓存失效就重新实例化 |
|
illu
2010-02-25
![]() |