with google python google-app-engine search autocomplete webapp2

python - google - API de búsqueda GAE de coincidencia parcial



python google api search (5)

Tengo el mismo problema para el control de escritura anticipada, y mi solución es analizar cadena a pequeña parte:

name=''hello world'' name_search = '' ''.join([name[:i] for i in xrange(2, len(name)+1)]) print name_search; # -> he hel hell hello hello hello w hello wo hello wor hello worl hello world

Espero que esto ayude

¿Usando la API de búsqueda de GAE es posible buscar una coincidencia parcial?

Intento crear la funcionalidad de autocompletar, donde el término sería una palabra parcial. p.ej.

> b
> bui
> construir

todos regresarían a "construir".

¿Cómo es esto posible con GAE?


al igual que la respuesta @Desmond Lua, pero con una función de tokenize diferente:

def tokenize(word): token=[] words = word.split('' '') for word in words: for i in range(len(word)): if i==0: continue w = word[i] if i==1: token+=[word[0]+w] continue token+=[token[-1:][0]+w] return ",".join(token)

analizará hello world como he,hel,hell,hello,wo,wor,worl,world .

es bueno para el propósito de autocompletar ligero



Mi versión optimizada: no repetir tokens

def tokenization(text): a = [] min = 3 words = text.split() for word in words: if len(word) > min: for i in range(min, len(word)): token = word[0:i] if token not in a: a.append(token) return a


Aunque la instrucción LIKE (coincidencia parcial) no se admite en Full Text Search, pero podrías hackearla.

En primer lugar, tokenize la cadena de datos para todas las subseries posibles (hello = h, he, hel, lo, etc.)

def tokenize_autocomplete(phrase): a = [] for word in phrase.split(): j = 1 while True: for i in range(len(word) - j + 1): a.append(word[i:i + j]) if j == len(word): break j += 1 return a

Crea un documento de índice + (API de búsqueda) usando las cadenas tokenizadas

index = search.Index(name=''item_autocomplete'') for item in items: # item = ndb.model name = '',''.join(tokenize_autocomplete(item.name)) document = search.Document( doc_id=item.key.urlsafe(), fields=[search.TextField(name=''name'', value=name)]) index.put(document)

Realizar búsqueda, y walah!

results = search.Index(name="item_autocomplete").search("name:elo")

https://code.luasoftware.com/tutorials/google-app-engine/partial-search-on-gae-with-search-api/