Если вы хотите, чтобы несколько потоков писали в один IndexWriter, я бы просто создал один поток, который делает что-то вроде
Parallel.ForEach(docs, d => { writer.Add(d,analyzer) });
Так что .NET имеет дело с разделением данных.
При больших размерах индексов некоторые люди находят улучшения в производительности при наличии нескольких индексов, в которые они пишут, а затем объединяют все индексы вместе. Насколько я понимаю, это действительно полезно только для действительно массивных индексов, но если вы хотите сделать это, вам, вероятно, придется разобраться с разделением данных самостоятельно. В этом случае может быть полезным использование более полнофункциональной библиотеки, такой как tpl.
Solr по своей сути является многопоточным, поэтому вы будете делать тот же фрагмент, который я дал вам ранее, за исключением того, что вместо непосредственного вызова средства записи вы вызовете свой метод REST / SolrNet.
Как правило, если вы спросите: «Должен ли я использовать Solr или сделать это сам?» ответ почти всегда "использовать Solr". Я не могу представить себе причину, по которой вы захотите сделать это сами, если только ваш jvm не очень плохой или вы действительно ненавидите java.