Partager via


Pagination pour de grands ensembles de résultats

Si vous avez un nombre important de résultats de recherche (par exemple, plus de 50 000) à parcourir dans une requête, nous vous recommandons d’utiliser l’approche décrite dans cet article au lieu de l’approche de StartRow. Cette approche utilise le tri sur [docid] dans l’ordre croissant et une restriction de requête sur la valeur IndexDocId avec une valeur croissante de IndexDocID pour chaque nouvelle page.

Cette approche présente les avantages suivants :

  • Elle offre une pagination disposant de meilleures performances
  • Elle n’a pas de limite en nombre de pages (si vous utilisez l’approche de StartRow et que la valeur StartRow est supérieure à 50 000, il existe un risque d’être limité par SharePoint).

Voici un exemple sur l’utilisation de cette approche :

Pour la page 1, émettez une requête avec un trie sur [docid] dans l’ordre croissant :

GET http://{site_url}/_api/search/query?querytext='sharepoint'&sortlist='[docid]:ascending'

Le résultat de cette requête doit inclure le contenu suivant :

...
<d:element m:type="SP.SimpleDataRow">
    <d:Cells>
        ...
        <d:element m:type="SP.KeyValue">
            <d:Key>DocId</d:Key>
            <d:Value>10</d:Value>
            <d:ValueType>Edm.Int64</d:ValueType>
        </d:element>
        ...

Obtenez la valeur DocId de la dernière entrée dans le résultat. Vous devez être en mesure de trouver DocId sous SP.SimpleDataRow. Imaginons que la valeur de DocId est 10. Vous utiliserez cette limite en tant restriction DocID pour la page 2 :

Pour la page 2, utilisez la requête suivante dans laquelle vous devez continuer à utiliser « sortlist » sur DocId dans l’ordre croissant et ajouter également une restriction IndexDocId :

GET http://{site_url}/_api/search/query?querytext='sharepoint indexdocid>10'&amp;sortlist='[docid]:ascending'

Imaginons que la valeur DocId de la dernière entrée est 20 dans le résultat.

Pour la page 3, continuez la requête avec le même modèle que la page précédente :

GET http://{site_url}/_api/search/query?querytext='sharepoint indexdocid>20'&amp;sortlist='[docid]:ascending'

Et ainsi de suite pour les autres pages.

Pour utiliser la même approche dans le modèle objet client, voir l’exemple suivant :

...
if (startRow == 0) // When issueing the query for first time, we don't have a DocId value yet
    keywordQuery.QueryText = "sharepoint";
else  // Putting the IndexDocId first and then the 'actual' query matters (in this case searching for the keyword 'sharepoint')
    keywordQuery.QueryText = string.Format("IndexDocId>{0} AND (sharepoint)", startRow);
keywordQuery.EnableSorting = true;
keywordQuery.SortList.Add("[DocId]", Microsoft.SharePoint.Client.Search.Query.SortDirection.Ascending);
...

Remarque

Lors de l’utilisation de SortList dans des requêtes de recherche, le nom de champ utilisé doit être placé entre crochets (par exemple, [DocId]).