La clase Index

La clase Index representa un índice que permite indexar, eliminar y buscar documentos.

Index se define en el módulo google.appengine.api.search.

Introducción

La clase Index proporciona argumentos para crear un índice, así como funciones que te permiten añadir, enumerar, buscar y eliminar documentos (o una colección iterable de documentos) en el índice. Para crear un índice, usa argumentos de la clase Index, incluidos el nombre y el espacio de nombres del índice.

El siguiente código muestra cómo insertar documentos en un índice y, a continuación, buscar documentos que coincidan con una consulta:

# 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

Constructor

El constructor de la clase Index se define de la siguiente manera:

Index(name, namespace=None)

Crea una instancia de la clase Index.

Argumentos

name

Nombre del índice (consulta los detalles en la propiedad name, más abajo).

namespace

En el caso de las aplicaciones multicliente, el espacio de nombres en el que se define el nombre del índice.

Valor de resultado

Una nueva instancia de la clase Index.

Propiedades

Una instancia de la clase Index tiene las siguientes propiedades:

esquema

Nombres de campos de asignación de esquemas a la lista de tipos admitidos. Solo es válido para los índices devueltos por el método search.get_indexes.

name

Nombre del índice, una cadena ASCII legible que identifica el índice. No debe contener caracteres de espacio y no debe empezar por un signo de exclamación (!).

namespace

Espacio de nombres en el que se define el nombre del índice.

storage_usage

Número aproximado de bytes que usa este índice. Es posible que el número no refleje los resultados de los cambios recientes. Solo es válido para los índices devueltos por el método search.get_indexes.

storage_limit

El almacenamiento máximo permitido para este índice, en bytes. Solo es válido para los índices devueltos por el método search.get_indexes.

Métodos de instancia

Las instancias de la clase Index tienen los siguientes métodos:

put(self, documents, deadline=None)

Si los documentos especificados ya se han incluido en el índice y tienen el mismo doc_ids, se vuelven a indexar con el contenido actualizado.

Argumentos

documentos

Documento (o colección iterable de documentos) que se va a indexar.

deadline

Fecha límite de la llamada RPC en segundos.

Valor de resultado

Lista de resultados (PutResult), uno por cada documento cuya indexación se haya solicitado.

Excepciones

PutError

No se ha podido indexar uno o varios documentos, o el número de documentos indexados no coincide con el número solicitado.

TypeError

Se ha enviado un atributo desconocido.

ValueError

El argumento no es un documento o una colección iterable de documentos, o el número de documentos es superior a MAXIMUM_DOCUMENTS_PER_PUT_REQUEST.

delete(self, document_ids, deadline=None)

Eliminar documentos del índice.

Si no hay ningún documento asociado a un identificador de la lista, se ignora ese identificador.

Argumentos

document_ids

Identificador (o lista de identificadores) de los documentos que se van a eliminar.

deadline

Fecha límite de la llamada RPC en segundos.

Excepciones

DeleteError

No se han podido eliminar uno o varios documentos, o el número de documentos eliminados no coincide con el número solicitado.

ValueError

El argumento no es una cadena o una colección iterable de identificadores de documentos válidos, o el número de identificadores de documentos es superior a MAXIMUM_DOCUMENTS_PER_PUT_REQUEST.

get(self,doc_id, deadline=None)

Recupera un Document del índice mediante el identificador del documento. Si no se encuentra el documento, devuelve None.

Argumentos

doc_id

Identificador del documento que se va a obtener.

deadline

Fecha límite de la llamada RPC en segundos.

Valor de resultado

Un objeto Document cuyo identificador coincida con el proporcionado por doc_id.

Busca en el índice los documentos que coincidan con la consulta. La consulta puede ser una cadena o un objeto Query.

Por ejemplo, el siguiente fragmento de código solicita una búsqueda de documentos en los que aparezca "first" en el asunto y "good" en cualquier parte, devuelve un máximo de 20 documentos, inicia la búsqueda desde "cursor token", devuelve otro cursor para la respuesta, ordena los resultados por asunto en orden descendente y devuelve los campos de autor, asunto y resumen, así como el contenido de un campo con fragmentos.

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'])))

El siguiente fragmento de código muestra cómo usar un cursor de resultados.

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

En el siguiente fragmento de código se muestra cómo usar un cursor 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))
               )

Argumentos

query

Consulta para buscar coincidencias en los documentos del índice, descrita en un objeto Query. Para obtener más información, consulta la descripción general del lenguaje de consulta.

deadline

Fecha límite de la llamada RPC en segundos.

Valor de resultado

Un objeto SearchResults que contiene una lista de documentos coincidentes, el número de resultados devueltos y el número de resultados coincidentes con la consulta.

Excepciones

TypeError

Un parámetro tiene un tipo no válido o se ha enviado un atributo desconocido.

ValueError

Un parámetro tiene un valor no válido.

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

Obtiene un intervalo de documentos de un índice en orden doc_id.

Argumentos

start_id

Cadena que contiene el identificador del documento del que se van a enumerar los documentos. De forma predeterminada, empieza por el primer identificador de documento.

include_start_object

Si true, incluye el documento especificado por start_id.

limit

Número máximo de documentos que se devolverán.

ids_only

Si es true, devuelve solo los identificadores de los documentos en lugar de los documentos completos.

deadline

Fecha límite de la llamada RPC en segundos.

Valor de resultado

Objeto A GetResponse que contiene una lista de los documentos recuperados, ordenada por identificador de documento.

Excepciones

TypeError

Se ha enviado un atributo desconocido.

Error

Se ha producido una subclase de Error al procesar la solicitud.