La classe di indice

La classe Index rappresenta un indice che consente l'indicizzazione, l'eliminazione e la ricerca di documenti.

Attenzione: **questa soluzione non è più consigliata:** le app che utilizzano questa API possono essere eseguite solo nel runtime Python 2 e dovranno eseguire l'upgrade a una [soluzione consigliata](/appengine/docs/standard/python/migrate-to-python3/migrating-services#migration_paths_for_bundled_services) prima di eseguire la migrazione al runtime Python 3.

Index è definito nel modulo google.appengine.api.search.

Introduzione

La classe Index fornisce argomenti per creare un indice e funzioni che consentono di aggiungere, elencare, cercare ed eliminare documenti (o una raccolta iterabile di documenti) all'interno dell'indice. Costruisci un indice utilizzando gli argomenti per la classe Index, inclusi nome e spazio dei nomi dell'indice.

Il codice seguente mostra come inserire i documenti in un indice, quindi cercarli corrispondenti a una query:

# Get the index.
index = search.Index(name='index-name')

# Create a document.
doc = search.Document(
    doc_id='document-id',
    fields=[search.TextField(name='subject', value='my first email'),
            search.HtmlField(name='body', value='<html>some content here</html>')])

# Index the document.
try:
    index.put(doc)
except search.PutError, e:
    result = e.results[0]
    if result.code == search.OperationResult.TRANSIENT_ERROR:
        # possibly retry indexing result.object_id
except search.Error, e:
    # possibly log the failure

# Query the index.
try:
    results = index.search('subject:first body:here')

    # Iterate through the search results.
    for scored_document in results:
        # process the scored_document

except search.Error, e:
    # possibly log the failure

Costruttore

Il costruttore per la classe Index è definito come segue:

Indice(name, namespace=None)

Costruisci un'istanza di classe Index.

Argomenti

name [nome]

Nome dell'indice (vedi proprietà nome di seguito, per i dettagli).

spazio dei nomi

Per le applicazioni multi-tenant, lo spazio dei nomi in cui è definito il nome di indice.

Valore risultato

Una nuova istanza di classe Index.

Proprietà

Un'istanza di classe Index ha le seguenti proprietà:

schema

Nomi dei campi di mappatura dello schema all'elenco dei tipi supportati. Valido solo per gli indici restituiti dal metodo search.get_indexes.

name [nome]

Nome dell'indice, una stringa ASCII leggibile dall'indice che identifica l'indice. Non deve contenere spazi vuoti e non deve iniziare con un punto esclamativo (!).

spazio dei nomi

Spazio dei nomi in cui viene definito il nome di indice.

storage_usage (uso della memoria)

Il numero approssimativo di byte utilizzati da questo indice. Il numero potrebbe non riflettere i risultati delle modifiche recenti. Valido solo per gli indici restituiti dal metodo search.get_indexes.

limite_di_spazio di archiviazione

Lo spazio di archiviazione massimo consentito per questo indice, in byte. Valido solo per gli indici restituiti dal metodo search.get_indexes.

Metodi di istanza

Le istanze della classe Index hanno i seguenti metodi:

put(self, documenti, deadline=None)

Se i documenti specificati sono già stati inseriti nell'indice e se hanno lo stesso doc_ids, vengono reindicizzati con contenuti aggiornati.

Argomenti

documenti

Documento (o raccolta iterabile di documenti) da indicizzare.

data limite

Scadenza per la chiamata RPC in secondi.

Valore risultato

Elenco dei risultati (PutResult), uno per ogni documento di cui viene richiesta l'indicizzazione.

Eccezioni

PutError

Uno o più documenti non sono stati indicizzati oppure il numero indicizzato non corrisponde al numero richiesto.

Errore di tipo

Controllo attributo ignorato.

ValoreErrore

Argomento non un documento o una raccolta iterabile di documenti o numero di documenti superiore a MAXIMUM_DOCUMENTS_PER_PUT_REQUEST.

delete(self, document_ids, deadline=None (Nessuno)

Elimina documenti dall'indice.

Se nell'elenco non esiste un documento, l'identificatore viene ignorato.

Argomenti

id_documento

Identificatore (o elenco di identificatori) dei documenti da eliminare.

data limite

Scadenza per la chiamata RPC in secondi.

Eccezioni

Elimina errore

Uno o più documenti non sono stati eliminati. Il numero eliminato non corrisponde al numero richiesto.

ValoreErrore

Argomento non una stringa o una raccolta iterabile di identificatori di documento validi o numero di identificatori di documento più grandi di MAXIMUM_DOCUMENTS_PER_PUT_REQUEST.

get(self,doc_id, deadline=None)

Recupera un Documento dall'indice utilizzando l'identificatore del documento. Se il documento non viene trovato, restituisce None.

Argomenti

id_doc

L'identificatore del documento da recuperare.

data limite

Scadenza per la chiamata RPC in secondi.

Valore risultato

Un oggetto Documento il cui identificatore corrisponde a quello fornito da doc_id.

Cerca nell'indice i documenti che corrispondono alla query. La query può essere una stringa o un oggetto Query.

Ad esempio, il seguente frammento di codice richiede una ricerca di documenti in cui 'il primo' si verifica nell'oggetto e 'valido' si verifica ovunque, restituendo al massimo 20 documenti, iniziando la ricerca dal 'token del cursore', restituendo un altro cursore per la risposta, ordinando per oggetto in ordine decrescente, restituendo il contenuto dell'autore, dell'oggetto e del campo di riepilogo, nonché uno snippet di campo del contenuto.

results = index.search(
          # Define the query by using a Query object.
          query=Query('subject:first good',
              options=QueryOptions(limit=20,
                  cursor=Cursor(),
                  sort_options=SortOptions(
                      expressions=[SortExpression(expression='subject',
                                                  default_value='')],
                      limit=1000),
                  returned_fields=['author', 'subject', 'summary'],
                  snippeted_fields=['content'])))

Il seguente frammento di codice mostra come utilizzare un cursore dei risultati.

cursor = results.cursor
for result in results:
     # process result
results = index.search(Query('subject:first good',
                       options=QueryOptions(cursor=cursor))
                      )

Il seguente frammento di codice mostra come utilizzare un cursore per_result:

results = index.search(query=Query('subject:first good',
                       options=QueryOptions(limit=20,
                       cursor=Cursor(per_result=True),
                       ...))
                       )

cursor = None
for result in results:
    cursor = result.cursor

results = index.search(
          Query('subject:first good', options=QueryOptions(cursor=cursor))
               )

Argomenti

query

La query con cui confrontare i documenti nell'indice, descritti in un oggetto Query. Per ulteriori informazioni, consulta la panoramica sulle query.

data limite

Scadenza per la chiamata RPC in secondi.

Valore risultato

Un oggetto SearchResults contenente un elenco di documenti con corrispondenza, un numero restituito e un numero corrispondente a quello della query.

Eccezioni

Errore di tipo

Il tipo di un parametro non è valido o è stato trasmesso un attributo sconosciuto.

ValoreErrore

Un parametro ha un valore non valido.

get_range(self, start_id=None, include_start_object=True, limit=100, ids_only=False, deadline=None)

Recupera un intervallo di documenti da un indice, in ordine doc_id.

Argomenti

start_id

Stringa contenente l'identificatore del documento da cui elencare i documenti. Per impostazione predefinita, inizia dal primo identificatore del documento.

include_start_object

Se true, includi un documento specificato da start_id.

limite

Numero massimo di documenti da restituire.

ids_only

Se true, restituisci solo identificatori di documento anziché documenti completi.

data limite

Scadenza per la chiamata RPC in secondi.

Valore risultato

Oggetto A GetResponse contenente un elenco dei documenti recuperati, ordinato per identificatore del documento.

Eccezioni

Errore di tipo

Controllo attributo ignorato.

Errore

Si è verificata una sottoclasse di Error durante l'elaborazione della richiesta.