Java 更新RAMDirectory的最佳方法

Java 更新RAMDirectory的最佳方法,java,lucene,Java,Lucene,Lucene索引中的特定文档需要以不一致的间隔进行更新。更新可以是每小时一次,也可以是每隔几分钟一次。目前,我有一个进程运行并查找更改,如果发生了更改,它(以Lucene 3.5的方式)会删除文档,然后将其重新添加到RAMDirectory 有没有更好的方法来管理不断变化的文档的Lucene索引?RAMDirectory是最好的选择吗 我用于“更新”索引的代码: Term idTerm = new Term("uid",row.getKey()); getWriter().deleteDocum

Lucene索引中的特定文档需要以不一致的间隔进行更新。更新可以是每小时一次,也可以是每隔几分钟一次。目前,我有一个进程运行并查找更改,如果发生了更改,它(以Lucene 3.5的方式)会删除文档,然后将其重新添加到RAMDirectory

  • 有没有更好的方法来管理不断变化的文档的Lucene索引?RAMDirectory是最好的选择吗 我用于“更新”索引的代码:

    Term idTerm = new Term("uid",row.getKey());
    getWriter().deleteDocuments(idTerm);
    getWriter().commit();
    // do some fun stuff creating a new doc with the changes
    getWriter().addDocument(doc);
    

    Lucene最近有两个非常有用的助手类来处理频繁变化的索引:

    • ,

    您可以在上阅读更多关于它们的信息。

    每次更新文档后,是否必须搜索文档?最简单的方法是,不需要做太多更改,将文档更新延迟到固定的时间间隔(比如每小时),然后进行批处理,并在时间X和Y之间累积所有更新。这将减少每几分钟删除一次的性能开销。