首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Lucene NRT搜索不起作用

Java Lucene NRT搜索不起作用
EN

Stack Overflow用户
提问于 2012-02-06 22:53:59
回答 3查看 789关注 0票数 1

和Lucene一起玩。尝试使我的更改对其他阅读线程可见。而不重建索引。为此,我使用了SearcherManager类。

管理器的创建

代码语言:javascript
复制
Directory index = new SimpleFSDirectory(new File(LUCENE_INDEX_PATH));
w = new IndexWriter(index, config);
indexReader = IndexReader.open(w, true);
manager = new SearcherManager(w, true, null, null);

更新请求

代码语言:javascript
复制
w.updateDocument(t, document);
manager.maybeReopen(); // openIfChanged same behavior
w.commit();

搜索请求

代码语言:javascript
复制
IndexSearcher searcher = manager.acquire();
try {
    return performSearch(query, searcher, skip, limit);
} finally {
    manager.release(searcher);
    searcher = null;
}

更改将刷新到磁盘,但新的搜索请求仅在应用程序重新启动(重新创建索引)后才能看到它们。看起来IndexSearcher仍然指向旧的索引。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-07 01:56:58

您不需要打开自己的IndexReader;只需(从您的IndexWriter)创建SearcherManager,然后使用acquire/release来获取搜索器/阅读器。

在使用编写器添加/删除文档之后,您应该调用maybeReopen,然后下次调用SearcherManager.acquire时,返回的搜索器将反映这些更改。最好使用后台线程(即,不是执行搜索的线程)来索引文档并调用maybeReopen。

您不需要调用IndexWriter.commit来使更改可见--只有当您需要持久性时才调用它(即,所有更改都安全地保存在磁盘上,并且可以在OS/JVM崩溃、断电、kill -9等情况下幸存下来)。

票数 4
EN

Stack Overflow用户

发布于 2012-02-06 22:58:57

如果要使用NRT搜索,请使用以IndexWriter为参数不同的SearcherManager构造函数。查看这篇文章http://blog.mikemccandless.com/2011/11/near-real-time-readers-with-lucenes.html

票数 0
EN

Stack Overflow用户

发布于 2012-02-06 23:34:43

看起来,我不应该创建IndexReader。

代码语言:javascript
复制
indexReader = IndexReader.open(w, true)

如果我删除这一行,一切都会正常。还不知道为什么

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9161992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档