This has been bugging me so much I've investigated further and found the cause. When a new forum post is saved it is indexed twice because first in EditPost.aspx.cs we do this in the handler:
if((thread.PostId == -1)||(userIsAllowedToUpdateThisPost))
{
thread.Post();
(which in turn leads to this.CreatePost(); which leads to OnContentChanged(e); > indexBuilder.ContentChangedHandler(sender, e); >
newID = DBIndexingQueue.Create(
this.siteId,
this.indexPath,
this.serializedItem,
this.itemKey,
this.removeOnly);
(and we see a row created in table [mp_IndexingQueue]
Then we continue through the handler to this
if(!notifyModeratorOnly)
{
thread.NotificationSent = true;
// produces duplicate indexing CF
thread.UpdatePost();
which leads to a second indexing. Commenting out the last line above prevents the duplication.
I think one of many possible fixes might be to a) remove this section from CreatePost()... (in ForumThread.cs)
if (result)
{
ContentChangedEventArgs e = new ContentChangedEventArgs();
OnContentChanged(e);
}
and b) take this line outside its condition so it always runs ... (in EditPost.aspx.cs):
thread.UpdatePost();
This should ensure every new post gets indexed, but only once. But it's all quite complicated and I might have got this wrong!