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%)?

È stato utile?

Soluzione

Sfortunatamente, il motore di app di Google non può eseguire corrispondenze di testo parziali

Dai documenti:

  

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top