It is usually best to cache the IndexSearcher across requests. If you have to keep re-opening an IndexSearcher for each search you lose out on any caching that Lucene can do. I usually just put it in the cache for x minutes.
The IndexWriter works great with multiple threads. I usually have one IndexWriter open, and then throw as many threads at it as the hardware allows. Andrew