Какой хороший шаблон для неточных запросов в хранилище данных Google App Engine?
-
21-08-2019 - |
Вопрос
Язык запросов к хранилищу данных Google App Engine (gql) не предлагает неточных операторов типа "НРАВИТСЯ" или даже нечувствительности к регистру.Проблему с учетом регистра можно обойти, сохранив версию поля в нижнем регистре.Но что, если я хочу найти человека, но не уверен в написании его имени?Существует ли общепринятый шаблон для работы с этим сценарием?
Решение
Цитирую из документации:
Подсказка:Фильтры запросов не имеют явного способа сопоставления только части строкового значения, но вы можете подделать совпадение префикса, используя фильтры неравенства:
db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2", "abc", u"abc" + u"\ufffd")
Это сопоставляет каждый объект MyModel со строковым свойством prop, которое начинается с символов abc.Строка Юникода u"\ufffd" представляет максимально возможный символ Юникода.Когда значения свойств сортируются по индексу, все значения, попадающие в этот диапазон, начинаются с данного префикса.
http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html
Другим вариантом является SearchableModel, однако я не верю, что он поддерживает частичные совпадения.
Другие советы
Вы могли бы хранить soundex http://effbot.org/librarybook/soundex.htm версия имени в хранилище данных.Затем, чтобы запросить имя, озвучьте запрос и найдите его.