La classe Index

La classe Index rappresenta un indice che consente di indicizzare, eliminare e cercare i documenti.

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

Introduzione

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

Il seguente codice mostra come inserire documenti in un indice e quindi cercare documenti 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 della classe Index è definito come segue:

Index(name, namespace=None)

Costruisci un'istanza della classe Index.

Argomenti

name

Nome dell'indice (per informazioni dettagliate, vedi nome proprietà di seguito).

spazio dei nomi

Per le applicazioni multitenant, lo spazio dei nomi in cui è definito il nome dell'indice.

Valore del risultato

Una nuova istanza della classe Index.

Proprietà

Un'istanza della 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 dell'indice, una stringa ASCII leggibile 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 è definito il nome dell'indice.

storage_usage

Il numero approssimativo di byte utilizzati da questo indice. Il numero potrebbe non riflettere il i risultati delle modifiche recenti. Solo valida per gli indici restituiti da search.get_indexes .

storage_limit

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

Metodi istanza

Le istanze della classe Index hanno i seguenti metodi:

put(self, documents, deadline=None)

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

Argomenti

documenti

Documento (o raccolta iterabile di documenti) da indicizzare.

deadline

Scadenza per la chiamata RPC in secondi.

Valore del risultato

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

Eccezioni

PutError

Non è stato possibile indicizzare uno o più documenti oppure il numero di documenti indicizzati non corrisponde a quello richiesto.

TypeError

Passato attributo sconosciuto.

ValueError

L'argomento non è un documento o una raccolta di documenti iterabili o il numero di documenti è superiore a MAXIMUM_DOCUMENTS_PER_PUT_REQUEST.

delete(self, document_ids, deadline=None)

Elimina documenti dall'indice.

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

Argomenti

document_ids

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

deadline

Scadenza per la chiamata RPC in secondi.

Eccezioni

DeleteError

Non è stato possibile eliminare uno o più documenti oppure il numero di documenti eliminati non corrisponde a quello richiesto.

ValueError

L'argomento non è una stringa o una raccolta iterabile di identificatori di documenti validi oppure un numero di identificatori di documenti superiore a 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

doc_id

L'identificatore del documento da recuperare.

scadenza

Scadenza per la chiamata RPC in secondi.

Valore del risultato

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

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

Ad esempio, il seguente frammento di codice richiede una ricerca dei documenti in cui "primo" si verifica nell'oggetto e "buono" si verifica in qualsiasi posizione, restituisce al massimo 20 documenti, avvia la ricerca da "token cursore", restituisce un altro singolo cursore per la risposta, ordina per oggetto in ordine decrescente, restituisce i campi autore, oggetto e riepilogo, nonché i contenuti del campo con snippet.

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 per trovare una corrispondenza con i documenti nell'indice, descritta in un oggetto Query. Per ulteriori informazioni, consulta la Panoramica sul linguaggio di query.

deadline

Scadenza per la chiamata RPC in secondi.

Valore del risultato

Un oggetto SearchResults contenente un elenco di documenti corrispondenti, un numero restituito e un numero corrispondente alla query.

Eccezioni

TypeError

Un parametro è di tipo non valido oppure è stato trasmesso un attributo sconosciuto.

ValueError

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 il documento specificato da start_id.

limite

Il numero massimo di documenti da restituire.

ids_only

Se true, restituisce solo gli identificatori dei documenti anziché i documenti completi.

scadenza

Scadenza per la chiamata RPC in secondi.

Valore del risultato

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

Eccezioni

TypeError

È stato passato un attributo sconosciuto.

Errore

Si è verificato un sottoinsieme di Error durante l'elaborazione della richiesta.