You can use lucene.net with multiple servers, but you need to implement an index server.
All changes you make must be queued and from time to time index pending documents. Also, you should immediately index if x elements are in the queue (x depends on the settings of the merge documents, for me it was 25,000).
The above reason is that you need to avoid making small changes to the index, as this will lead to reduced overtime performance due to the creation of a large number of small files. Uou can run 2 index servers, but only 1 will be indexed at a time by locking by index, the only reason for this is a break, if the first one goes down, it depends on your needs.
I used a 15 GB index with 30 million records. The script that I had with this was under azure.
Changes were pushed every 15 minutes, and the index was combined with 25,000 changes and each combined index contained 250,000 documents. Each web server checked the memory store for changes every 15 minutes and blocked the index reader, which was then canceled if the changes were downloaded. Maximum documents per file are mainly for stopping web servers loading many previous changes.
I used Lucene.AzureDirectory to start, but it was not able to reliably detect modified drops in the blob repository, so I ended up repeating the drops and comparing them locally and loading as needed.
Now would I implement something like this again? the answer is no. I would use elasticsearch or solr since you are reinventing the wheel.
Dreamwalker
source share