Fermer

août 25, 2022

Rechercher de manière optimale FIND – Différentes manières de rechercher des types de contenu spécifiques


Requête de recherche de base

Cela aide à récupérer toutes les pages standard. Injectez le FindAPI, Client dans votre classe pour récupérer toutes les pages qui héritent Page de base.

var searchClient = ServiceLocator.Current.GetInstance<IClient>();
var results = SearchClient.Instance.Search<BasePage>().GetContentResult();

Avec texte de recherche

var results = SearchClient.Instance.Search<BasePage>()
          .For("Search Query")
          .GetContentResult();

Certains types de contenu

Cela ne récupère que les pages de type NouvellesPage du contenu indexé.

var results = SearchClient.Instance.Search<NewsPage>()
        .For("Search Query")
        .GetResult();

Récupérer tout mais exclure certains

Pour ce faire, nous devons utiliser les expressions de filtre.

Type de match

MatchType correspond par correspondance de type exacte. Donc pour obtenir toutes les pages mais pas NouvellesPagenous pouvons appliquer l’expression de filtre comme suit.

var result = client
             .Search<BasePage>()
             .Filter(x => !x.MatchType(typeof(NewsPage)))
             .GetResult();

Nous pouvons ajouter des conditions supplémentaires avec les métadonnées de la page. L’exemple ci-dessous exclut tous NouvellesPage types de pages sauf celles qui sont marquées comme étant les plus récentes.

var result = client.Search<BasePage>()
                   .Filter(x => !x.MatchType(typeof(NewsPage)) | ((NewsPage)x).IsLatest.Match(true)) 
                   .GetResult();

MatchTypeHierarchy

MatchTypeHierarchy correspond à n’importe quel type dans la hiérarchie de types de l’objet, signifie sa propre classe et toute classe/interface en hérite.

var result = client.Search<BasePage>()
                   .Filter(x => !x.MatchTypeHierarchy(typeof(IGenericPage)))
                   .GetResult();

Recherche sur plusieurs types (ne partageant pas la classe de base commune)

InclureType

Cette méthode crée une demande de recherche pour un type, puis inclut des types supplémentaires dans la demande. Mais nous devons fournir une projection du type supplémentaire au type de retour de la demande de recherche, soit le type d’origine, soit une projection.

var result = client.Search<NewsPage>.For("Search Query")
                       .IncludeType<NewsPage, ArticlePage>(x => new NewsPage
                        {
                           Title = x.Title,
                           Content = x.MainBody
                        }).GetResult();

Dans ce cas, vous recherchez NouvellesPage et ArticlePage et récupérer les résultats comme NouvellesPage.

Mais il est préférable de projeter les deux types sur le troisième type. L’exemple suivant récupère les pages de type NouvellesPage en classe Résultat de la recherche et comprend ArticlePage dans la même classe que les résultats de recherche.

var result = client.Search<NewsPage>.For("Search Query")
              .Select(x => new SearchResult
              {
                Title = x.Title,
                Content = x.Content
              })
             .IncludeType<SearchResult, ArticlePage>(x => new SearchResult
              {
                Title = x.Title,
                Content = x.MainBody
              })
             .GetResult();

Vous voulez connaître la différence entre GetContentResult Contre ObtenirRésultat Cliquez ici






Source link