Ricerca jolly su Appengine in python
-
05-07-2019 - |
Domanda
Sto iniziando con Python su Google App Engine per creare un database di contatti. Qual è il modo migliore per implementare la ricerca con caratteri jolly?
Ad esempio, posso fare una query ('name =',% ewman%)?
Soluzione
Sfortunatamente, il motore di app di Google non può eseguire corrispondenze di testo parziali
Suggerimento: i filtri di query non hanno un modo esplicito per far corrispondere solo parte di un valore di stringa, ma puoi falsificare una corrispondenza di prefisso utilizzando i filtri di disuguaglianza:
db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2", "abc", u"abc" + u"\ufffd")
Corrisponde a ogni entità MyModel con un oggetto di proprietà della stringa che inizia con i caratteri abc. La stringa unicode u " \ ufffd " rappresenta il più grande carattere Unicode possibile. Quando i valori delle proprietà sono ordinati in un indice, i valori che rientrano in questo intervallo sono tutti i valori che iniziano con il prefisso indicato.
Altri suggerimenti
App Engine non può eseguire query "simili", perché non può eseguirle in modo efficiente. Né può il tuo database SQL, tuttavia: A 'foo LIKE "% bar% "' la query può essere eseguita solo eseguendo una scansione sequenziale sull'intera tabella.
Ciò di cui hai bisogno è un indice invertito. La ricerca full-text di base è disponibile in App Engine con SearchableModel . Bill Katz ha scritto una versione potenziata qui e c'è una soluzione commerciale per App Engine (con una versione gratuita) disponibile qui .