Fermer

mars 16, 2020

Comment se connecter à un index de recherche Azure géré par Sitecore avec l'API de recherche Azure


La création d'un contexte de recherche pour effectuer vos requêtes de recherche devrait être facile, n'est-ce pas? Avec l'API Content Search de Sitecore, il est aussi simple que de passer le nom littéral de l'index en tant que paramètre dans une méthode ContentSearchManager . La connexion à un index de recherche Azure géré par Stecore pour effectuer des requêtes à l'aide de l'API de recherche Azure ajoute cependant une certaine complexité à cela. Pourquoi? Lorsque vous effectuez une reconstruction d'index à partir du panneau de configuration Sitecore, Azure Search réindexera dans un index de reconstruction. Ensuite, il permutera l'index reconstruit et l'index actuellement actif afin de faire de l'index reconstruit le nouvel index actif. C’est une bouchée, je vais donc vous donner un exemple. Supposons que votre nom d'index soit «custom-web-index» et Azure Search indique que «custom-web-index» est l'index actuellement actif utilisé dans votre environnement de CD. Lorsque vous effectuez une reconstruction d'index, Azure Search peut le faire dans un index de reconstruction appelé «custom-web-index-135». Une fois la reconstruction terminée, Azure Search définira «custom-web-index-135» comme index actuellement actif à utiliser dans votre environnement de CD. Lorsque vous essayez d'accéder à votre index à l'aide de l'API de recherche Azure, vous n'avez aucun moyen de deviner le nombre qui sera ajouté au nom de votre index («custom-web-index-xxx»).

Le code

Ci-dessous, un extrait de code montrant comment se connecter à «custom_web_index» ou «custom_master_index» selon le contexte dans lequel l'index de recherche est demandé.

 public ISearchIndexClient GetSitecoreSearchIndexClient ()
{
     var connectionStringDictionary = ConnectionStringParser.Parse (Sitecore.Configuration.Settings.GetConnectionString ("cloud.search"));
     var searchServiceUri = nouvel Uri (connectionStringDictionary ["serviceUrl"]);
     var searchServiceName = searchServiceUri.Host.Split ('.'). First ();
     var apiKey = connectionStringDictionary ["apiKey"];
     renvoyer un nouveau SearchIndexClient (searchServiceName, GetIndexName (), new SearchCredentials (apiKey));
}

chaîne privée GetIndexName ()
{
     // utilise la réflexion pour obtenir le nom de l'index de recherche actuel de sitecore
     var searchCloudIndexNamePropertyInfo =
        typeof (CloudSearchProviderIndex) .GetProperty (SearchCloudIndexNamePropertyName,
        BindingFlags.Instance | BindingFlags.NonPublic);

     retourner searchCloudIndexNamePropertyInfo
        .GetValue ((CloudSearchProviderIndex) RetrieveSearchContext (). Index) .ToString ();
}

public IProviderSearchContext RetrieveSearchContext ()
{
     return ContentSearchManager.GetIndex ($ "custom_ {Context.Database.Name} _index"). CreateSearchContext ();
} 

Conclusion

Pour voir quel index est l'index actuellement actif dans votre service de recherche Azure, vous pouvez afficher le catalogue d'index dans le portail Azure. Il listera quel index est actif à ce moment. L'API de recherche de contenu de Sitecore vous évite de vous connecter à un index de recherche dans Azure Search. Cependant, si vous devez utiliser l'API Azure Search pour effectuer vos requêtes, vous aurez besoin du code ci-dessus pour pouvoir vous connecter à votre index de recherche Azure géré par Sitecore.






Source link