A classe de índice

A classe Index representa um índice que permite indexar, eliminar e pesquisar documentos.

Index está definido no módulo google.appengine.api.search.

Introdução

A classe Index fornece argumentos para construir um índice, bem como funções que lhe permitem adicionar, listar, pesquisar e eliminar documentos (ou uma coleção iterável de documentos) no índice. Cria um índice com argumentos para a classe Index, incluindo o nome e o espaço de nomes do índice.

O código seguinte mostra como colocar documentos num índice e, em seguida, pesquisar documentos que correspondam a uma 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

Construtor

O construtor da classe Index é definido da seguinte forma:

Index(name, namespace=None)

Construa uma instância da classe Index.

Argumentos

name

Nome do índice (consulte a propriedade name abaixo para ver detalhes).

namespace

Para aplicações multiinquilino, o espaço de nomes no qual o nome do índice está definido.

Valor do resultado

Uma nova instância da classe Index.

Propriedades

Uma instância da classe Index tem as seguintes propriedades:

schema

Mapeamento do esquema de nomes de campos para a lista de tipos suportados. Válido apenas para índices devolvidos pelo método search.get_indexes.

name

Nome do índice, uma string ASCII legível que identifica o índice. Não pode conter carateres de espaço em branco e não pode começar com um ponto de exclamação (!).

namespace

Espaço de nomes no qual o nome do índice está definido.

storage_usage

O número aproximado de bytes usados por este índice. O número pode não refletir os resultados das alterações recentes. Válido apenas para índices devolvidos pelo método search.get_indexes.

storage_limit

O armazenamento máximo permitido para este índice, em bytes. Válido apenas para índices devolvidos pelo método search.get_indexes.

Métodos de instância

As instâncias da classe Index têm os seguintes métodos:

put(self, documents, deadline=None)

Se os documentos especificados já tiverem sido colocados no índice e tiverem o mesmo doc_ids, são reindexados com conteúdos atualizados.

Argumentos

documents

Documento (ou coleção iterável de documentos) a indexar.

deadline

Prazo para a chamada RPC em segundos.

Valor do resultado

Lista de resultados (PutResult), um para cada documento cuja indexação foi pedida.

Exceções

PutError

Não foi possível indexar um ou mais documentos, ou o número de documentos indexados não correspondeu ao número solicitado.

TypeError

Foi transmitido um atributo desconhecido.

ValueError

O argumento não é um documento ou uma coleção iterável de documentos, ou o número de documentos é superior a MAXIMUM_DOCUMENTS_PER_PUT_REQUEST.

delete(self, document_ids, deadline=None)

Elimine documentos do índice.

Se não existir nenhum documento para um identificador na lista, esse identificador é ignorado.

Argumentos

document_ids

Identificador (ou lista de identificadores) dos documentos a eliminar.

deadline

Prazo para a chamada RPC em segundos.

Exceções

DeleteError

Não foi possível eliminar um ou mais documentos, ou o número de documentos eliminados não corresponde ao número solicitado.

ValueError

O argumento não é uma string nem uma coleção iterável de identificadores de documentos válidos, ou o número de identificadores de documentos é superior a MAXIMUM_DOCUMENTS_PER_PUT_REQUEST.

get(self,doc_id, deadline=None)

Recupera um Document do índice através do identificador do documento. Se o documento não for encontrado, devolve None.

Argumentos

doc_id

O identificador do documento a obter.

deadline

Prazo para a chamada RPC em segundos.

Valor do resultado

Um objeto Document cujo identificador corresponde ao fornecido por doc_id.

Pesquise no índice documentos que correspondam à consulta. A consulta pode ser uma string ou um objeto Query.

Por exemplo, o seguinte fragmento de código pede uma pesquisa de documentos em que "first" ocorre no assunto e "good" ocorre em qualquer lugar, devolvendo, no máximo, 20 documentos, começando a pesquisa a partir de "cursor token", devolvendo outro cursor único para a resposta, ordenando por assunto por ordem descendente, devolvendo os campos autor, assunto e resumo, bem como o conteúdo de um campo com 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'])))

O fragmento de código seguinte mostra como usar um cursor de resultados.

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

O fragmento de código seguinte mostra como usar um 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

consulta

A consulta a fazer corresponder aos documentos no índice, descrita num objeto Query. Para mais informações, consulte a vista geral da linguagem de consulta.

deadline

Prazo para a chamada RPC em segundos.

Valor do resultado

Um objeto SearchResults que contém uma lista de documentos correspondentes, o número devolvido e o número correspondente à consulta.

Exceções

TypeError

Um parâmetro tem um tipo inválido ou foi transmitido um atributo desconhecido.

ValueError

Um parâmetro tem um valor inválido.

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

Obter um intervalo de documentos a partir de um índice, por ordem doc_id.

Argumentos

start_id

String que contém o identificador do documento a partir do qual listar os documentos. Por predefinição, começa no primeiro identificador de documento.

include_start_object

Se true, inclua o documento especificado por start_id.

limit

Número máximo de documentos a devolver.

ids_only

Se true, devolve apenas identificadores de documentos em vez de documentos completos.

deadline

Prazo para a chamada RPC em segundos.

Valor do resultado

Objeto A GetResponse que contém uma lista dos documentos obtidos, ordenada pelo identificador do documento.

Exceções

TypeError

Foi transmitido um atributo desconhecido.

Erro

Ocorreu alguma subclasse de Error durante o processamento do pedido.