У меня есть приложение Google App Engine с определенной моделью, назовем его Game.
Это относится к футбольной игре, ее дате, рефери (ссылка), списку из 2 клубов (ссылки), счету, его фазе (ссылка), соревнованию (ссылка) и сезону (ссылка). Другими словами, в нем есть несколько полей, которые я собираюсь сделать доступными для поиска на странице расширенного поиска.
Например, если кто-то хочет найти все игры по сезону (скажем, 2008/2009) и по дате (скажем, после 01.01.2009), я должен проанализировать переменные GET и получить что-то вроде:
games = Game.all()
// parse GET variables.
if (variables.hasFilter("season")
games.filter("game_season = ", season)
if (variables.hasFilter("after_date")
games.filter("game_date > ", after_date)
Требуется специальный составной индекс:
- kind: Game
properties:
- name: game_season
- name: game_date
Теперь, если кто-то хочет найти Сезон и Клуб, он будет таким же, как указано выше, за исключением того, что для него требуется другой составной индекс:
- kind: Game
properties:
- name: game_season
- name: game_club
Теперь, если кто-то хочет найти сезон, дату и клуб, ему нужен даже другой составной индекс:
- kind: Game
properties:
- name: game_season
- name: game_date
- name: game_club
У меня вопрос: если у меня есть третий готовый индекс и который обслуживает запросы, могу ли я удалить два первых индекса, так как он может быть использован для обслуживания трех вышеупомянутых расширенных поисков, или Google App Engine сгенерирует NeedIndexError, поскольку Не знаете, как повторно использовать третий индекс для обслуживания первых двух расширенных поисков?
Проблема в том, что я хотел бы создать расширенный поиск по нескольким полям (скажем, 6 - дата, сезон, соревнование, клуб, фаза, счет). Для этого потребуется комбинация индексов с двумя сущностями, комбинация индексов с 3 сущностями и т. Д. До окончательного индекса, объединяющего все сущности.
Вопросы:
Может ли GAE действительно повторно использовать составные индексы, чтобы при создании, скажем, составного индекса для 6 сущностей мне не приходилось генерировать более простые версии этого индекса для 5, 4, 3 и 2 сущностей?
Если нет, есть ли лучший способ решения этой проблемы? Единственное, что я планирую сделать, это вставить «пустые» фильтры, например, при поиске игр в определенном сезоне и клубе:
games = Game.all ()
// анализируем переменные GET
if (variables.hasFilter ("season")
games.filter ("game_season =", сезон)
еще
games.filter ("game_season =" *)
if (variables.hasFilter ("date")
games.filter ("game_date =", date)
еще
games.filter ("game_date =" *)
if (variables.hasFilter ("club")
games.filter ("game_club =", club)
еще
games.filter ("game_club =" *)
Я не реализовал этот обходной путь, потому что считаю его уродливым, а это значит, что это не лучший способ справиться с этой проблемой. (также, я все еще не знаю, как реализовать подстановочные знаки).
Спасибо за любой вклад по этой проблеме.