Recently I got a question if there is a way to transfer EPiServer Find optimizations from one index to another. By optimizations here I mean synonyms, related queries, autocomplete entries and best bets. There was no utility for this, so my suggestion was to use the same REST API that we use in EPiServer Find UI. Using this REST API without documentation and ability to look under the hood might be quite challenging, so I decided to write a tool for this myself.
The tool is an EPiServer Admin mode plugin that allows exporting and importing EPiServer Find optimizations entities between indexes or sites. It is packed as a NuGet package and uses JSON format for export. It is available at nuget.episerver.com, so you can install it by running Install-Package Vro.FindExportImport in Visual Studio package manager console. Once installed the plugin can be found in Admin mode under the Tools section.
Exporting and importing Find optimizations has two synchronization problems: how to match sites (each optimization belong to an individual site or "All sites") and how to match the content selected in Best bets.
When it comes to sites, it is relatively easy: optimizations can be exported only within a single site.
When importing, users select a target site and all optimizations just get new site value during import.
Please note, the value “All sites” in EPiServer Find does not mean all available sites, but rather a unique value indicating that an optimization has an effect on all sites. Therefore, when exporting with “All sites” selected, it just means only optimizations with “All sites” value are exported and not optimizations from all sites. The same is for import: all imported entities assigned to the selected site or the special “All sites” value. The plugin also can be used to copy optimizations from one site to another within the same index.
For the content references in best bets, I have not found a better solution than just trying to find a matching content by name on the target site. For best bets with pages, importer searches within pages, and for best bets with commerce products, importer searches only within commerce catalog items. If there is no content with a matching name, the best bet is skipped from importing.
When importing optimizations, the same validation rules apply as if optimization is created manually in EPiServer Find UI. If there is already an optimization with the same properties like the one being imported, no new optimization is created, and no existing optimizations get updated.
Plugins source code is available at GitHub