Pacote google.appengine.ext.search

Resumo

Indexação e pesquisa de textos completos, implementadas em Python puro.

Define uma subclasse SearchableModel de db.Model compatível com indexação e pesquisa de texto completo, com base nos índices existentes do repositório de dados.

Não espere muito. Primeiro, não há classificação, o que é uma péssima desvantagem. Também não há correspondência de frase exata, correspondência de substring, operadores booleanos, derivação ou outros recursos comuns de pesquisa de texto completo. Por fim, a compatibilidade com palavras de parada (palavras comuns não indexadas) está atualmente limitada ao inglês.

Para serem indexadas, as entidades precisam ser criadas e salvas como instâncias de SearchableModel, por exemplo:

class Article(search.SearchableModel):

text = db.TextProperty() ...

article = Article(text=…) article.save()

Para pesquisar o índice de texto completo, use o método SearchableModel.all() para acessar uma instância do SearchableModel.Query, que apresenta subclasses db.Query. Use o método search() para fornecer uma consulta de pesquisa, além de qualquer outro filtro ou ordem de classificação. Por exemplo:

query = article.all().search(‘a search query’).filter(…).order(…) para resultado na consulta:

O índice de texto completo é armazenado em uma propriedade denominada __searchable_text_index.

Como especificar vários índices e propriedades a serem indexados

Por padrão, um índice é criado com todas as propriedades de string. Você pode definir vários índices e especificar quais propriedades precisam ser indexadas para cada um substituindo o método SearchableProperties() de model.SearchableModel, por exemplo:

class Article(search.SearchableModel):

@classmethod def SearchableProperties(cls):

return [[‘book’, ‘author’], [‘book’]]

Neste exemplo, dois índices serão mantidos: um que inclui as propriedades "book" e "author", e outra apenas para a propriedade "book". Eles serão armazenados em propriedades denominadas __searchable_text_index_book_author e __searchable_text_index_book, respectivamente. O índice que inclui todas as propriedades não será criado, a menos que seja adicionado explicitamente assim:

@classmethod def SearchableProperties(cls):

return [[‘book’, ‘author’], [‘book’], search.ALL_PROPERTIES]

O valor de retorno padrão de SearchableProperties() é [search.ALL_PROPERTIES] (um índice, todas as propriedades).

Para pesquisar usando um índice personalizado, passe a definição dele no parâmetro "properties" de "search":

Article.all().search(‘Lem’, properties=[‘book’, ‘author’])

A ordem das propriedades na lista é importante.

Como adicionar índices a index.yaml

Em geral, se quiser fornecer apenas pesquisa de texto completo, você não precisará adicionar índices extras a index.yaml. No entanto, se quiser usar search() em uma consulta, além de um ancestral, um filtro ou uma ordem de classificação, você precisará criar um índice em index.yaml com a propriedade __searchable_text_index. Para .. rubric:: example

  • kind: Article properties: - name: __searchable_text_index - name: date

    direction: desc

Da mesma maneira, se você tiver criado um índice personalizado (consulte acima), use o nome da propriedade na qual ele está armazenado. Por exemplo, __searchable_text_index_book_author.

O uso de SearchableModel aumentará notadamente a latência de operações save(), porque grava uma linha de índice para cada palavra indexável. Isso também significa que a latência de save() aumentará aproximadamente com o tamanho das propriedades em uma determinada entidade. Aviso hacker.

class google.appengine.ext.search.SearchableEntity(kind_or_entity, word_delimiter_regex=None, *args, **kwargs)source

Bases: google.appengine.api.datastore.Entity

Uma subclasse de datastore.Entity compatível com indexação de texto completo.

Indexa automaticamente todas as propriedades de string e de texto usando os índices internos por propriedade do armazenamento de dados. Para pesquisar, use a classe SearchableQuery e o método Search().

classmethod IndexPropertyName(properties)source

Dada a definição de índice, retorna o nome da propriedade para colocá-lo.

class google.appengine.ext.search.SearchableModel(parent=None, key_name=None, _app=None, _from_entity=False, **kwds)source

Bases: google.appengine.ext.db.Model

Uma subclasse de db.Model compatível com pesquisa e indexação de texto completo.

Indexa automaticamente todas as propriedades baseadas em string. Para pesquisar, use o método all() para receber uma SearchableModel.Query e use o método search().

Modifica SearchableProperties() para definir propriedades a serem indexadas e/ou vários índices (consulte o comentário do arquivo).

class Query(model_class=None, keys_only=False, cursor=None, namespace=None, _app=None, distinct=False, projection=None)source

Bases: google.appengine.ext.db.Query

Uma subclasse de db.Query compatível com pesquisa de texto completo.

search(search_query, properties=[])Fonte

Adiciona uma pesquisa de texto completo a essa consulta.

Parâmetros

uma string que contém a consulta de pesquisa de texto completo. (search_query,) –

Retorna

self

classmethod SearchableProperties()source
classmethod all()source

Retorna uma SearchableModel.Query para esse tipo.

classmethod from_entity(entity)source

Envolve db.Model.from_entity() e injeta SearchableEntity.

class google.appengine.ext.search.SearchableMultiQuery(bound_queries, orderings)source

Bases: google.appengine.api.datastore.MultiQuery

Uma multiconsulta compatível com Search() por meio de pesquisa de subconsultas.

Search(*args, **kwargs)Fonte

Adiciona uma consulta de pesquisa tentando adicioná-la a todas as subconsultas.

Parâmetros
  • args: passado para pesquisar cada subconsulta

  • kwargs: passado para pesquisar cada subconsulta

Retorna

self por consistência com SearchableQuery.

class google.appengine.ext.search.SearchableQuery(kind=None, filters={}, _app=None, keys_only=False, compile=True, cursor=None, namespace=None, end_cursor=None, projection=None, distinct=None, _namespace=None)source

Bases: google.appengine.api.datastore.Query

Uma subclasse de datastore.Query compatível com pesquisa de texto completo.

Pesquisa apenas entidades que foram criadas e armazenadas usando-se as classes SearchableEntity ou SearchableModel.

GetFilterPredicate(*args, **kwds)Fonte

Adiciona filtros à consulta de pesquisa e a delega para a superclasse.

Copia a assinatura de Query.GetFilterPredicate(). Gerará BadFilterError se um filtro na propriedade de índice já existir.

Retorna

datastore_query.FilterPredicate

Search(search_query, word_delimiter_regex=None, properties=[])Fonte

Adiciona uma consulta de pesquisa. Pode ser combinada com filtros.

As palavras-chave na consulta de pesquisa serão descartadas de maneira silenciosa se forem palavras de parada ou muito curtas, ou seja, se não forem indexadas.

Parâmetros

search_query: string

Retorna

# esta consulta SearchableQuery