Поиск в режиме реального времени доступен в Lucene , начиная с 2.9 . У Lucid Imagination есть статья об этой возможности (до выпуска 2.9). Основная идея в том, что теперь вы можете получить IndexReader от IndexWriter. Если вы регулярно обновляете этот IndexReader, вы получите большинство изменений даты от IndexWriter.
Обновление: я не видел ни одного кода, но вот общая идея.
Весь новый документ будет записан в IndexWriter
, предпочтительно созданный с RAMDirectory
, который не будет часто закрываться. (Чтобы сохранить этот индекс в памяти, вам, возможно, придется иногда записывать его на диск.)
У вас будет несколько индексов на диске, на котором будут создаваться отдельные IndexReaders. Наверху этих ридеров могут быть созданы MultiReader и Searcher. Один из ридеров будет из индекса в памяти.
Через определенный интервал (скажем, в несколько секунд) вы удаляете текущий Reader из MultiReader, получаете новый Reader из IndexWriter и создаете MultiReader / Searcher с новым набором Readers.
Согласно статье в Lucid Imagination (ссылка выше), они пытались писать 50 документов в секунду без значительного замедления.