lucene good practice and thread safety

Я использую lucene для индексирования документов и выполнения поиска, после которого я немедленно удаляю их. все это можно рассматривать как несколько атомарное действие, которое включает следующие шаги:

индекс (писатель) --> поиск (искатель) --> получить документы по баллам (читатель) --> удалить документы (читатель)

это действие может выполняться несколькими параллельными потоками на одном индексе (с использованием FSDirectory).

ВАЖНОЕ ЗАМЕЧАНИЕ: каждый поток обрабатывает отдельный набор документов, поэтому один поток не будет трогать документы другого потока

для этого у меня есть несколько вопросов:

1) должен ли я использовать единые экземпляры (для всех потоков) IndexWriter, IndexReader и IndexSearcher? (они должны быть потокобезопасными)

2) может ли IndexWriter работать с индексом, а IndexReader удалять документы? Нужно ли закрывать один поток, чтобы другой сделал свое дело? То есть, может ли один поток писать в индекс, а другой удалять из него документы (как я уже говорил, я могу гарантировать, что они работают с отдельными наборами данных)

3) любые другие хорошие практики и предложения, которые у вас могут быть, будут очень признательны.

спасибо большое!

17
задан levtatarov 16 January 2012 в 10:52
поделиться