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 indexadosPor 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.yamlEm 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âmetrosuma string que contém a consulta de pesquisa de texto completo. (search_query,) –
Retornaself
- 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
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.
Retornadatastore_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âmetrossearch_query: string
Retorna# esta consulta SearchableQuery