Quando una chiamata di query viene completata normalmente, restituisce il risultato come oggetto
SearchResults. L'oggetto dei risultati indica il numero di documenti corrispondenti trovati nell'indice e il numero di documenti corrispondenti restituiti. Include anche un elenco
di ScoredDocuments corrispondenti.
L'elenco di solito contiene una parte di tutti i documenti corrispondenti trovati, poiché
la ricerca restituisce un numero limitato di documenti ogni volta che viene chiamata. Utilizzando un offset o un cursore, puoi recuperare tutti i documenti corrispondenti, un sottoinsieme alla volta.
Risultati
A seconda del valore dell'limit
opzione di query,
il numero di documenti corrispondenti restituiti nel risultato potrebbe essere inferiore al
numero trovato. Tieni presente che il numero trovato sarà una stima se l'accuratezza del numero trovato è inferiore al numero trovato. Indipendentemente da come configuri le
opzioni di ricerca, una chiamata search() troverà non più di 10.000 documenti
corrispondenti.
Se sono stati trovati più documenti di quelli restituiti e vuoi recuperarli tutti, devi ripetere la ricerca utilizzando un offset o un cursore, come spiegato di seguito.
Documenti con punteggio
I risultati di ricerca includeranno un elenco di
[ScoredDocuments]/appengine/docs/standard/services/search/python/scoreddocumentclass)
che corrispondono alla query. Puoi scorrere l'elenco per elaborare ogni documento a turno:
Per impostazione predefinita, un documento con punteggio contiene tutti i campi del documento originale
che è stato indicizzato. Se le
opzioni di query
hanno specificato
returned_fields
, solo questi campi vengono visualizzati nella proprietà
campi
del documento. Se hai creato campi calcolati specificando
returned_expressions
o
snippeted_fields
, questi verranno visualizzati separatamente nella proprietà
espressioni
del documento.
Utilizzo degli offset
Se la ricerca trova più documenti di quelli che puoi restituire contemporaneamente, utilizza un offset per indicizzare l'elenco dei documenti corrispondenti. Ad esempio, il limite predefinito della query è di 20 documenti. Dopo aver eseguito una ricerca la prima volta (con offset 0) e recuperato i primi 20 documenti, recupera i 20 documenti successivi impostando l'offset su 20 ed eseguendo di nuovo la stessa ricerca. Continua a ripetere la ricerca, incrementando l'offset ogni volta del numero di documenti restituiti:
Gli offset possono essere inefficienti quando si itera su un set di risultati molto grande.
Utilizzo dei cursori
Puoi anche utilizzare i cursori per recuperare un intervallo secondario di risultati. I cursori sono utili quando intendi presentare i risultati di ricerca in pagine consecutive e vuoi assicurarti di non saltare alcun documento nel caso in cui un indice possa essere modificato tra le query. I cursori sono anche più efficienti quando si itera su un set di risultati molto grande.
Per utilizzare i cursori, devi creare un cursore iniziale e includerlo nelle opzioni di query. Esistono due tipi di cursori: per query e per risultato. Un cursore di query fa sì che un cursore separato venga associato all'oggetto risultati restituito dalla chiamata di ricerca. Un cursore per risultato fa sì che un cursore venga associato a ogni documento con punteggio nei risultati.
Utilizzo di un cursore di query
Per impostazione predefinita, un cursore appena creato è un cursore di query. Questo cursore contiene la posizione dell'ultimo documento restituito nei risultati della ricerca. Viene aggiornato a ogni ricerca. Per enumerare tutti i documenti corrispondenti in un indice, esegui la stessa ricerca finché il risultato non restituisce un cursore nullo:
Utilizzo di un cursore per risultato
Per creare cursori per risultato, devi impostare la proprietà del cursore per_result su true quando crei il cursore iniziale. Quando la ricerca restituisce risultati, a ogni documento è associato un cursore. Puoi utilizzare il cursore per specificare una nuova ricerca con risultati che iniziano con un documento specifico. Tieni presente che quando passi un cursore per risultato alla ricerca, non ci sarà alcuncursore di queryy associato al risultato stesso; result.getCursor() restituirà null, quindi non puoi utilizzarlo per verificare se hai recuperato tutte le corrispondenze.
Salvataggio e ripristino dei cursori
Un cursore può essere serializzato come stringa sicura per il web, salvato e poi ripristinato per un utilizzo successivo: