gpt4 book ai didi

java - IndexWriter.commit() 不足以更改索引

转载 作者:行者123 更新时间:2023-12-01 12:44:44 24 4
gpt4 key购买 nike

我刚刚将我们的 Lucene 实现从 3.1 移植到 4.9,如果没有 forceMerge(1) (曾经是优化的),我似乎仍然无法更新索引中的文档。据我了解,每当我更新文档时,旧文档都会被标记为已删除,而新文档将存储在新的段/文件中。即使在升级后,我仍然看到的结果是文档被标记为已删除,但搜索者似乎从未看到新的段。对该文档的搜索只是空的。为什么不起作用?

我期望工作的代码:

IndexWriter indexWriter =
new IndexWriter(FSDirectory.open(indexDirectoryFile),
getIndexWriterConfig());
Document document = buildDocument(p);
indexWriter.updateDocument(
new Term(SKU_FIELD_NAME, p.getSku().toString()), document);
indexWriter.commit();
indexWriter.close();
searcherManager.maybeRefresh();

有效的代码:

IndexWriter indexWriter =
new IndexWriter(FSDirectory.open(indexDirectoryFile),
getIndexWriterConfig());
Document document = buildDocument(p);
indexWriter.updateDocument(
new Term(SKU_FIELD_NAME, p.getSku().toString()), document);
indexWriter.commit();
**indexWriter.forceMerge(1,true);**
indexWriter.close();
searcherManager.maybeRefresh();

最佳答案

提交后索引发生更改,是 SearcherManager 给您带来了错误的印象。

maybeRefresh() 返回什么?如果false,则意味着索引正在由不同的线程刷新(对于较大的索引,这需要时间)。在此刷新完成之前,其他线程只需与过时的阅读器/搜索器一起生活。

如果您想对此进行测试,请显式打开一个新的 IndexReader(不使用 SearcherManager),并在 commit() 之后执行查询。我敢打赌您会在搜索结果中看到更新的数据。

关于java - IndexWriter.commit() 不足以更改索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24812788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com