Simples mesmo. No SQL, se eu quiser pesquisar um campo de texto por alguns caracteres, eu posso fazer:
SELECT blah FROM blah WHERE blah LIKE '%text%'
A documentação do App Engine não menciona como conseguir isso, mas certamente é um problema bastante comum?
google-app-engine
google-cloud-datastore
gql
littlecharva
fonte
fonte
Respostas:
O BigTable, que é o back-end do banco de dados do App Engine, será escalado para milhões de registros. Devido a isso, o App Engine não permitirá que você faça nenhuma consulta que resultará em uma verificação de tabela, pois o desempenho seria terrível para uma tabela bem preenchida.
Em outras palavras, toda consulta deve usar um índice. É por isso que você só pode fazer
=
,>
e<
consultas. (Na verdade, você também pode fazer isso,!=
mas a API faz isso usando uma combinação de>
e<
consultas.) É também por isso que o ambiente de desenvolvimento monitora todas as consultas que você faz e adiciona automaticamente quaisquer índices ausentes ao seuindex.yaml
arquivo.Não há como indexar uma
LIKE
consulta, portanto ela simplesmente não está disponível.Assista a esta sessão de IO do Google para obter uma explicação muito melhor e mais detalhada sobre isso.
fonte
Estou enfrentando o mesmo problema, mas encontrei algo nas páginas do Google App Engine:
Dica: Os filtros de consulta não têm uma maneira explícita de corresponder apenas a parte de um valor de sequência, mas você pode falsificar uma correspondência de prefixo usando os filtros de desigualdade:
Isso corresponde a todas as entidades MyModel com um prop de propriedade de sequência que começa com os caracteres abc. A string unicode u "\ ufffd" representa o maior caractere Unicode possível. Quando os valores da propriedade são classificados em um índice, os valores que se enquadram nesse intervalo são todos os valores que começam com o prefixo fornecido.
http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html
talvez isso possa funcionar;)
fonte
O Altough App Engine não oferece suporte a consultas LIKE, consulte as propriedades ListProperty e StringListProperty . Quando um teste de igualdade é feito nessas propriedades, o teste será realmente aplicado a todos os membros da lista, por exemplo,
list_property = value
testa se o valor aparece em qualquer lugar da lista.Às vezes, esse recurso pode ser usado como uma solução alternativa para a falta de consultas LIKE. Por exemplo, torna possível fazer uma pesquisa de texto simples, conforme descrito nesta publicação .
fonte
Você precisa usar o serviço de pesquisa para executar consultas de pesquisa de texto completo semelhantes ao SQL
LIKE
.Gaelyk fornece um idioma específico do domínio para realizar consultas de pesquisa mais amigáveis . Por exemplo, o snippet a seguir encontrará os dez primeiros livros classificados dos mais recentes com o título
fern
e o gênero exatamente correspondentesthriller
:Like é escrito como operador de correspondência de Groovy
=~
. Ele suporta funçõesdistance(geopoint(lat, lon), location)
como também.fonte
App Engine lançou um serviço de busca de texto completo de uso geral na versão 1.7.0 que suporta o armazenamento de dados.
Detalhes no anúncio .
Mais informações sobre como usar isso: https://cloud.google.com/appengine/training/fts_intro/lesson2
fonte
Dê uma olhada no Objectify aqui , é como uma API de acesso ao armazenamento de dados. Há uma FAQ com esta pergunta especificamente, aqui está a resposta
fonte
Basta seguir aqui: init.py # 354 "> http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/search/ init .py # 354
Funciona!
fonte
Testei isso com a API Java de baixo nível do GAE Datastore. Eu e funciona perfeitamente
fonte
Em geral, mesmo que essa seja uma postagem antiga, uma maneira de produzir um 'LIKE' ou 'ILIKE' é reunir todos os resultados de uma consulta '> =' e, em seguida, gerar resultados em loop em python (ou Java) para elementos contendo o que você está procurando.
Digamos que você queira filtrar usuários com aq = 'luigi'
fonte
Não é possível fazer uma pesquisa LIKE no mecanismo de aplicativos do armazenamento de dados, como a criação de uma lista de matriz faria o truque se você precisar pesquisar uma palavra em uma string.
e depois procurar no índice usando o objectify.
e isso fornecerá uma lista com todos os itens que contêm o mundo que você fez na pesquisa
fonte
Se
LIKE '%text%'
sempre se comparar a uma palavra ou a algumas (permutações de pensamento) e seus dados mudarem lentamente (lentamente significa que não é proibitivamente caro - tanto em termos de preço quanto em termos de desempenho - criar e atualizar índices), a Entidade de Índice de Relação (RIE) pode ser a resposta.Sim, você precisará criar uma entidade adicional do armazenamento de dados e preenchê-la adequadamente. Sim, existem algumas restrições que você precisará contornar (uma é o limite de 5000 no comprimento da propriedade da lista no armazenamento de dados GAE). Mas as pesquisas resultantes são extremamente rápidas.
Para obter detalhes, consulte minhas publicações RIE com Java e Ojbectify e RIE com Python .
fonte
"Gosto" é frequentemente usado como substituto de um pobre homem para a pesquisa de texto. Para pesquisa de texto, é possível usar o Whoosh-AppEngine .
fonte