Я использую lucene для индексации документов и выполнения поиска, после чего немедленно удаляю их.
все это можно рассматривать как некое атомарное действие, включающее следующие шаги:
индекс (писатель) -> поиск (искатель) -> получить документы по счету
(читатель) -> удалить документы (читатель)
это действие может быть выполнено несколькими параллельными потоками с одним и тем же индексом (используя FSDirectory
).
ВАЖНОЕ ПРИМЕЧАНИЕ: каждый поток обрабатывает отдельный набор документов, поэтому один поток не будет касаться документов другого потока
для этого у меня есть несколько вопросов:
1) я должен использовать единичные экземпляры (для всех потоков) IndexWriter
, IndexReader
и IndexSearcher
? (они должны быть потокобезопасными)
2) может ли IndexWriter
манипулировать индексом, а IndexReader
удаляет документы? мне нужно закрыть один для другого, чтобы сделать свое дело?
это означает, может ли один поток записывать в индекс, а другой - удалять из него (как я упоминал ранее, я могу гарантировать, что они обрабатывают отдельные наборы данных)
3) любые другие полезные практики и предложения, которые могут у вас возникнуть, будут оценены по достоинству.
спасибо большое!