O que é um bom padrão para consultas inexatas no Google App Engine Datastore?
-
21-08-2019 - |
Pergunta
A linguagem de consulta do Google App Engine Datastore (GQL) não oferece operadores inexatas como "Like" ou mesmo insensibilidade caso. Pode-se obter em torno da questão sensível caso armazenando uma versão minúscula de um campo. Mas e se eu quiser procurar por uma pessoa, mas não tenho a certeza da ortografia do nome? Existe um padrão aceito para lidar com este cenário?
Solução
Citando a documentação:
Dica: filtros de consulta não tem uma forma explícita para corresponder apenas parte de um valor da cadeia, mas você pode fingir uma correspondência de prefixo usando filtros de desigualdade:
db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2", "abc", u"abc" + u"\ufffd")
Esta corresponde a cada entidade MyModel com um prop propriedade de cadeia que começa com o abc caracteres. A cadeia de caracteres Unicode U "\ ufffd" representa o maior personagem possível Unicode. Quando os valores de propriedade são classificadas em um índice, os valores que se enquadram nesta faixa são todos os valores que começam com o prefixo dado.
http://code.google.com/appengine/docs/ python / datastore / queriesandindexes.html
Outra opção é o SearchableModel, no entanto, eu não acredito que ele suporta partidas parciais.
http://billkatz.com/2008/8/A- SearchableModel-para-App-Engine
Outras dicas
Você pode armazenar um soundex http://effbot.org/librarybook/soundex.htm versão do nome no armazenamento de dados. Então, para consultar um nome, SOUNDEX a consulta, e olhe isso.