Частичное сопоставление API поиска GAE

Используя API поиска GAE, можно ли искать частичное совпадение?

Я пытаюсь создать функциональность автозаполнения, где термин будет частичным словом. например.

> b
> bui
> построить

все вернут «здание».

Как это возможно с GAE?

5 Solutions collect form web for “Частичное сопоставление API поиска GAE”

Хотя утверждение LIKE (частичное совпадение) не поддерживается в полнотекстовом поиске, но вы можете его обмануть.

Сначала отметьте строку данных для всех возможных подстрок (hello = h, he, hel, lo и т. Д.),

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 

Создайте индекс + документ (Search API), используя токенырованные строки

 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) 

Выполните поиск, и валах!

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

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

Как описано в полнотекстовом поиске и инструкции LIKE , нет, это невозможно, так как Search API реализует полнотекстовую индексацию.

Надеюсь это поможет!

как @Desmond Lua ответ, но с другой функцией tokenize:

 def tokenize (слово):
   маркер = []
   words = word.split ('')
   слово за слова:
     для i в диапазоне (len (слово)):
       if i == 0: продолжить
       w = слово [i]
       если i == 1: 
         маркер + = [слово [0] + W]
         Продолжать

       маркер + = [лексема [-1:] [0] + W]

   return ",". join (токен)

он будет разбирать hello world как he,hel,hell,hello,wo,wor,worl,world .

это хорошо для легкой цели автозаполнения

У меня такая же проблема для управления typeahead, и мое решение представляет собой строку синтаксического анализа для небольшой части:

 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 

Надеюсь, что эта помощь

Моя версия оптимизирована: не повторяйте токены

 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 
  • Как сделать обработчики автоматически .decode ('utf-8') для всех маршрутизируемых параметров?
  • Как я могу токенизировать имя пользователя, используя JWT в Google App Engine (Python)?
  • Django vs webapp2 в App Engine
  • GAE Webapp2 - разрушающий сеанс не работает
  • Python App Engine webapp2 медленный путь
  • Настройте несколько обработчиков сеансов на python webapp2
  • webapp2 + jinja2: Как я могу получить uri_for (), работающий в jinja2-views
  • Каков хороший подход к управлению соединением db в приложении Python Google Cloud SQL (GAE)?
  • Python - лучший язык программирования в мире.