Freigeben über


Paginierung für große Resultsets

Wenn Sie in einer Abfrage eine große Anzahl von Suchergebnissen (z. B. über 50.000) durchblättern müssen, empfiehlt es sich, den in diesem Artikel erläuterten Ansatz anstelle des StartRow-Ansatzes zu verwenden. Dieser Ansatz verwendet die Sortierung nach [docid] in aufsteigender Reihenfolge und verwendet eine Abfragebeschränkung auf den IndexDocId-Wert mit einem aufsteigenden Wert von IndexDocID für jede neue Seite.

Die Vorteile dieses Ansatzes sind:

  • Die Paginierung bietet eine bessere Leistung.
  • Die Anzahl der Seiten ist nicht beschränkt (wenn Sie den StartRow-Ansatz verwenden und der StartRow-Wert größer als 50.000 ist, besteht das Risiko, dass Sie von SharePoint gedrosselt werden.)

Nachfolgend sehen Sie ein Beispiel für die Verwendung dieses Ansatzes:

Geben Sie für Seite 1 eine Abfrage mit Sortierung nach [docid] in aufsteigender Reihenfolge aus:

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

Das Ergebnis dieser Abfrage sollte den folgenden Inhalt enthalten:

...
<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>
        ...

Rufen Sie den DocId-Wert des letzten Eintrags im Ergebnis ab. DocId sollte jetzt unter SP.SimpleDataRow zu finden sein. Angenommen, der DocId-Wert ist 10. Sie verwenden diesen als DocID-Einschränkung für Seite 2:

Verwenden Sie für Seite 2 die folgende Abfrage, in der Sie weiterhin "sortlist" nach DocId in aufsteigender Reihenfolge verwenden, aber zudem eine IndexDocId-Einschränkung hinzufügen müssen:

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

Angenommen, der DocId-Wert des letzten Eintrags im Ergebnis ist 20.

Führen Sie für Seite 3 die Abfrage mit dem gleichen Muster wie bei der vorherigen Seite aus:

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

Fahren Sie für die restlichen Seiten genau so fort.

Um den gleichen Ansatz in CSOM zu verwenden, sehen Sie sich die folgenden Beispiele an:

...
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);
...

Hinweis

Bei der Verwendung der „SortList“-Option in Suchanfragen muss der verwendete Feldname in eckige Klammern gesetzt werden (z. B. [DocId]).