1

我正在为一个项目使用 Google App Engine,我需要对数据库进行一些查询。我使用 JDOQL 询问数据库。就我而言,我想获得包含子字符串“array”的大学。我认为我的查询有错误,因为它按字母顺序返回大学的名称,而不是包含子字符串的名称。

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

有人可以告诉我我的查询有什么问题吗?

谢谢您的帮助!

编辑

我有一个大学商店的列表,我有一个建议箱,我们可以在其中以他的名字请求一所大学。我想自动完成请求的名称。

4

2 回答 2

1

应用引擎不支持全文搜索,请star issue 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");
于 2010-10-03T16:34:03.730 回答
0

正确的做法是这样的——

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是一个隐式参数名称,您可以用任何名称替换)

于 2010-09-21T07:47:40.827 回答