Compartir a través de


Paginación para conjuntos de resultados grandes

Si tiene un gran número de resultados de búsqueda (por ejemplo, más de 50.000) para desplazarse por las páginas en una consulta, se recomienda usar el enfoque explicado en este artículo en lugar del enfoque de StartRow. Este enfoque usa la ordenación [docid] en orden ascendente y usa una restricción de consulta en el valor IndexDocId con un valor creciente de IndexDocID para cada página nueva.

Las ventajas de este enfoque son:

  • La paginación ofrece un mejor rendimiento
  • No tiene un límite en el número de páginas (si usa el enfoque de StartRow y el valor de StartRow es mayor que 50.000, se corre el riesgo de que SharePoint la limite).

Aquí tiene un ejemplo de este enfoque:

En la Página 1, envíe una consulta con ordenar por [docid] en orden ascendente:

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

El resultado de esta consulta debe contener el siguiente contenido:

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

Obtenga el valor DocId de la última entrada del resultado. Debe poder encontrar DocId en SP.SimpleDataRow. Supongamos que el valor de DocId es 10. Se usará esto como DocID restricción para la página 2:

En la página 2, use la siguiente consulta, donde necesita seguir usando sortList en DocIdorden ascendente, pero también agregue una restricción IndexDocId:

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

Supongamos que el valor DocId de la última entrada del resultado es 20.

En la página 3, continuar la consulta con el mismo patrón que la página anterior:

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

Y así sucesivamente para el resto de las páginas.

Para usar el mismo enfoque en CSOM, vea el ejemplo siguiente:

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

Nota:

Cuando se usa SortList en consultas de búsqueda, el nombre de campo que se usa debe ir entre corchetes (por ejemplo, [DocId]).