A classe Index

A classe Index representa um índice que permite que os documentos sejam indexados, excluídos e pesquisados.

Cuidado: **esta solução não é mais recomendada:** os apps que usam essa API executada somente no ambiente de execução do Python 2 e será necessário fazer upgrade para uma [solução recomendada](/appengine/docs/standard/python/migrate-to-python3/migrating-services#migration_paths_for_bundled_services) antes de migrar Ambiente de execução do Python 3.

Index é definido no módulo google.appengine.api.search.

Introdução

A classe Index fornece argumentos para criar um índice, bem como funções que permitem adicionar, listar, pesquisar e excluir documentos (ou uma coleção iterável de documentos) dentro do índice. Você cria um índice usando argumentos para a classe Index, inclusive o nome e o namespace do índice.

O código a seguir mostra como colocar documentos em um índice e, em seguida, procura documentos correspondentes 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 maneira:

Index(name, namespace=None)

Crie uma instância da classe Index.

Argumentos

name

Nome do índice. Consulte a propriedade name, abaixo, para detalhes.

namespace

Para aplicativos multilocatários, o namespace em que o nome do índice é definido.

Valor do resultado

Uma nova instância da classe Index.

Propriedades

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

schema

Nomes de campo de mapeamento do esquema para a lista de tipos compatíveis. Válido apenas para índices retornados pelo método search.get_indexes.

name

Nome do índice, uma string ASCII legível que identifica o índice. Não pode conter caracteres de espaço em branco nem iniciar com um ponto de exclamação (!).

namespace

Namespace em que o nome do índice é definido.

storage_usage

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

storage_limit

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

Métodos da instância

As instâncias de 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 os mesmos doc_ids, eles serão reindexados com o conteúdo atualizado.

Argumentos

documents

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

deadline

Prazo para chamada RPC em segundos.

Valor do resultado

Lista de resultados (PutResult), um para cada documento solicitado para ser indexado.

Exceções

PutError

Um ou mais documentos deixaram de ser indexados, ou o número indexado não correspondeu ao número solicitado.

TypeError

Atributo desconhecido passado.

ValueError

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

delete(self, document_ids, deadline=None)

Exclua documentos do índice.

Se nenhum documento existir para um identificador na lista, esse identificador será ignorado.

Argumentos

document_ids

Identificador (ou lista de identificadores) de documentos a serem excluídos.

deadline

Prazo para chamada RPC em segundos.

Exceções

DeleteError

Um ou mais documentos deixaram de ser excluídos, ou o número excluído não correspondeu ao número solicitado.

ValueError

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

get(self,doc_id, deadline=None)

Recupera um Document do índice usando o identificador do documento. Caso o documento não seja encontrado, retorna None.

Argumentos

doc_id

O identificador do documento a ser recuperado.

deadline

Prazo para chamada RPC em segundos.

Valor do resultado

Um objeto Document com um identificador correspondente ao fornecido por doc_id.

Procura o índice dos documentos que correspondem à consulta. A consulta pode ser uma string ou um objeto Query.

Por exemplo, o fragmento de código a seguir solicita uma pesquisa de documentos em que "first" ocorre no assunto e "good" ocorre em qualquer lugar. Ele retorna, no máximo, 20 documentos, começando a pesquisa por "cursor token". Em seguida, retorna outro cursor para a resposta, classifica por assunto em ordem decrescente e retorna os campos de autor, assunto e resumo, bem como um conteúdo de campo em formato de 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'])))

O fragmento de código a seguir 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 a seguir 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

query

A consulta correspondente aos documentos no índice, descritos em um objeto Query. Para mais informações, consulte a Visão geral da linguagem de consulta.

deadline

Prazo para chamada RPC em segundos.

Valor do resultado

Um objeto SearchResults contendo uma lista de documentos correspondentes, número retornado e número correspondente à consulta.

Exceções

TypeError

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

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)

Receba um intervalo de documentos de um índice, na ordem doc_id.

Argumentos

start_id

String que contém o identificador de documento com base em que os documentos são listados. Por padrão, começa no primeiro identificador de documento.

include_start_object

No caso de true, inclua o documento especificado por start_id.

limit

Número máximo de documentos a serem retornados.

ids_only

Caso seja true, retorne apenas identificadores de documento, em vez de documentos completos.

deadline

Prazo para chamada RPC em segundos.

Valor do resultado

O objeto A GetResponse que contém uma lista dos documentos recuperados, ordenados pelo identificador de documento.

Exceções

TypeError

Atributo desconhecido passado.

Error

Alguma subclasse de Error ocorreu durante o processamento da solicitação.