Fermer

avril 2, 2024

Boosting dans la recherche unifiée / Blogs / Perficient

Boosting dans la recherche unifiée / Blogs / Perficient


Dans la vue d’administration d’Optimizely Search & Navigation, les administrateurs peuvent définir un certain poids pour différentes propriétés (titre, contenu, résumé ou contenu du document). Lorsqu’un utilisateur recherche un mot-clé correspondant à la valeur d’une propriété, le poids plus élevé de cette propriété rendra les pages correspondantes plus susceptibles d’apparaître en haut des résultats de recherche.

Facteur

Une fois que vous avez configuré les pondérations, vous pouvez augmenter les scores en appelant une méthode de recherche unifiée standard : Recherche unifiéePour:

var result = client.UnifiedSearchFor(searchText).GetResult();

Ou appeler Utilisation de UnifiedWeights() sans paramètres. Cela peut également augmenter les scores en fonction des pondérations définies par l’administrateur.

var result = client.UnifiedSearch(Language.English).For(searchText).UsingUnifiedWeights().GetResult();

Le problème:

Cependant, dans des scénarios réels, ces 4 pondérations de propriété prêtes à l’emploi dans la vue administrateur ne suffisent évidemment pas. Par exemple, nous souhaitons augmenter le nom de l’auteur de la page d’article lors de l’utilisation de la recherche. Comment peut-on faire ça?

La solution:

Eh bien, comme ces paramètres ne sont pas extensibles, la solution consiste à utiliser Boost avec des filtres pour votre requête de recherche. Nous utiliserons BoostMatching méthode d’extension pour augmenter le score de hits en fonction de certains critères, quelque chose comme ceci :

query = query.BoostMatching(x => x.Author.MatchCaseInsensitive(searchText), 2);

Cet extrait ci-dessus fonctionnera pour une recherche spécifique à un type. Mais dans une recherche unifiée, où nous recherchons plusieurs types et où les résultats sont des objets ISearchContent, nous avons besoin d’une étape supplémentaire :

query = query.BoostMatching(x => x.MatchTypeHierarchy(typeof(ArticlePage)) & ((ArticlePage)x).Author.MatchCaseInsensitive(searchText), 2);

Ce qui précède ne fera qu’augmenter l’ArticlePage dont le nom de l’auteur correspond au texte de recherche, les autres types de pages seront ignorés dans cette condition d’amélioration. Et le poids d’augmentation de cette condition de correspondance est de 2. Selon la documentation, « Le poids de propriété par défaut, 1, n’affecte pas le score. Un poids supérieur à 1 booste le score si l’information se trouve dans une propriété correspondante. Un poids inférieur à 1 réduit le score ».

Vous pouvez intégrer plusieurs conditions d’amélioration dans une extension de recherche et l’appeler de n’importe où.

public static IQueriedSearch<ISearchContent, CustomFiltersScoreQuery> ApplyUnifiedSearchBoosting(this ITypeSearch<ISearchContent> baseSearchQuery, string searchText)
{
      return baseSearchQuery
            .BoostMatching(x => x.MatchTypeHierarchy(typeof(ArticlePage)) & ((ArticlePage)x).Author.AnyWordBeginsWith(searchText), 2)
            .BoostMatching(x => x.MatchTypeHierarchy(typeof(ProductPage)) & ((ProductPage)x).ProductCode.MatchCaseInsensitive(searchText), 4);
}

Enfin, vous pouvez stocker vos propres valeurs de poids dans les paramètres de votre application ou dans le CMS. Je préférerais le stocker dans certains types de page de paramètres afin qu’ils puissent être configurables.






Source link