We have moved to GitHub Issues
Created by Shannon Deminick 12 Mar 2013, 12:51:13 Updated by Shannon Deminick 07 Sep 2015, 18:05:51
If an index already exists and a rebuild index command is executed we should rebuild the index in a temporary location (even in RAM directory) and then replace the live index with the temporary one so that the live site isn't affected. Currently when a rebuild index command is executed, the index is deleted and then is rebuild so during the rebuild search results will be empty.
In order to do this correctly, any writes to the index would need to be blocked until the rebuilding is complete but searches should still be able to query, then when the index is merged, both reads/writes need to be blocked until that is done.
I think it would be good to queue indexing of published items during rebuild. And after rebuild and merge process this queue. I guess the time for merging would be quite short, but the rebuild could last several minutes. Maybe the queueing could also be done during merge. Thus nothing gets lost.
As it turns out Lucene does this all for us nicely without much work. I've had to refactor how index rebuilding works (much less code) and it will handle concurrent reading and blocking writing. In fact it actually does this today (based on what their docs say and how we currently do it), but the new way I've implemented is a lot nicer.
Assignee: Shannon Deminick
Backwards Compatible: True
Due in version: 7.3.0