It used to be, after each data import I would kick off a full index rebuild programmatically. Because of the large amounts of data and computed fields, each rebuild was taking a long time and led to me using Hot Swappable Indexes.
An optimization I found that helped with this was how to only re-index the new data that I just added. You can call the method IndexCustodian.RefreshTree() on a folder, and only it and its children will be re-indexed.
The code for this...
var database = Sitecore.Data.Database.GetDatabase("master");
Item dataFolder = database.GetItem(new ID(Settings.GetSetting("CourseFolderId")));
SitecoreIndexableItem indexableFolder = new SitecoreIndexableItem(dataFolder);
Sitecore.ContentSearch.Maintenance.IndexCustodian.RefreshTree(indexableFolder);
Item dataFolder = database.GetItem(new ID(Settings.GetSetting("CourseFolderId")));
SitecoreIndexableItem indexableFolder = new SitecoreIndexableItem(dataFolder);
Sitecore.ContentSearch.Maintenance.IndexCustodian.RefreshTree(indexableFolder);
This is essentially the same functionality as clicking the Re-Index Tree button in the Developer ribbon.
Doing this reduced the time spent on re-indexing after an import by a large amount.
One side-note, the RefreshTree() method returns a collections of Jobs that you could then monitor their progress if you wanted. You can read more about Jobs here.
No comments:
Post a Comment