Проблема с JDOQL для получения результатов с запросом "содержит"

Я использую Google App Engine для проекта, и мне нужно сделать несколько запросов к базе данных. Я использую JDOQL, чтобы спросить базу данных. В моем случае я хочу получить университет, который содержит подстроку "массив". Я думаю, что мой запрос содержит ошибку, потому что он возвращает названия университетов в алфавитном порядке, а не те, которые содержат подстроку.

Query query = pm.newQuery("SELECT FROM " + University.class.getName() + " WHERE name.contains("+array+") ORDER BY name RANGE 0, 5");

Может кто-нибудь сказать мне, что не так в моем запросе?

Спасибо за помощь!

РЕДАКТИРОВАТЬ

У меня есть список магазинов университетов, и у меня есть ящик для предложений, где мы можем запросить университет по его имени. И я хочу, чтобы автозаполнение запрошенного имени.

2 ответа

Решение

Движок приложения не поддерживает полнотекстовый поиск, вы должны отметить звездочку 217. Однако возможен частичный обходной путь. И в вашем случае я думаю, что это хорошо подходит.

Прежде всего, настройте свою модель так, чтобы была также версия имени в нижнем (или верхнем регистре) - я предполагаю, что она называется lname. Если вы не хотите, чтобы ваши запросы были чувствительными к регистру.

Затем вы запрашиваете так:

Query query = pm.newQuery(University.class);
query.setFilter("lname >= startNameParam");
query.setFilter("lname < stopNameParam");
query.setOrdering("lname asc");
query.declareParameters("String startNameParam");
query.declareParameters("String stopNameParam");
query.setRange(0, 5);
List<University> results = (List<University>) query.execute(search_value, search_value + "z");

Правильный способ сделать это так:

Query query = pm.newQuery(University.class,":p.contains(name)");
query.setOrdering("name asc");
query.setRange(0, 5);
List univs = q.execute(Arrays.asList(array)); 

(примечание- в этом случае :p является неявным именем параметра, которое можно заменить любым именем)

Другие вопросы по тегам