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