Sitecore does provide strategy
TimedIndexRefreshStrategy to refresh an index. It uses an interval based trigger.
In Sitecore 8.* it is used by the
Sitecore 9 does not use it at all and you won’t be able to find it in Sitecore config files.
If the strategy matches you need, you can add it to your custom index, for example, in the following way:
<index id="my_custom_index" … >
<timed type="Sitecore.ContentSearch.Maintenance.Strategies.TimedIndexRefreshStrategy, Sitecore.ContentSearch">
However you should also remember that the refreshing approach has a major disadvantage. It is simply not able to track deleted items. Refreshing always goes though existing items. If an item was deleted from your data source, refreshing will never reach it.
This is why I suggest you following the
Switch On Rebuild solution
Switch On Rebuild
By default Sitecore does delete content from an index when it is being rebuilt. During that time search requests do not return any data.
Nevertheless Sitecore provides a solution for this issue. Its main idea is to switch solr cores on rebuild.
Switch On Rebuild in Sitecore or SWAP in Solr are out of the box features.
You can set up Solr to rebuild an index in a separate core so that the rebuilding does not affect the search index that is currently used. Once the rebuilding and the optimization of the index completes, Sitecore switches the two cores, and the rebuilt and optimized index is used.
You have to duplicate solr cores and apply some configuration changes to enable it for your indexes. Follow this guide to archive it.