Что такое хороший шаблон для неточных запросов в хранилище данных Google App Engine? - PullRequest
3 голосов
/ 04 февраля 2009

Язык запросов Google App Engine Datastore (gql) не предлагает неточных операторов, таких как "LIKE" или даже нечувствительность к регистру. Можно обойти проблему, чувствительную к регистру, сохраняя строчную версию поля. Но что, если я хочу найти человека, но я не уверен в написании имени? Есть ли общепринятая схема для работы с этим сценарием?

Ответы [ 2 ]

8 голосов
/ 04 февраля 2009

Цитирование из документации:

Совет: Фильтры запросов не имеют явного способа сопоставления только части строкового значения, но вы можете подделать совпадение префикса с помощью фильтров неравенства:

db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2", "abc", u"abc" + u"\ufffd")

Это соответствует каждому объекту MyModel с помощью свойства строки, начинающегося с символов abc. Строка Юникода u "\ ufffd" представляет максимально возможный символ Юникода. Когда значения свойств сортируются в индексе, значения, попадающие в этот диапазон, являются всеми значениями, которые начинаются с данного префикса.

http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html

Другим вариантом является SearchableModel, однако я не верю, что он поддерживает частичные совпадения.

http://billkatz.com/2008/8/A-SearchableModel-for-App-Engine

1 голос
/ 11 мая 2009

Вы можете сохранить версию имени soundex http://effbot.org/librarybook/soundex.htm в хранилище данных. Затем, чтобы запросить имя, озвучьте запрос и найдите его.

...