如何搜索谷歌appengine数据存储区中的字符串字段

时间:2015-09-02 13:40:10

标签: google-app-engine search properties google-cloud-datastore

我有一个google appengine项目,我在那里存储用户。

public void createUser(String loginId, String password) {
    Entity e = new Entity("User");
    e.setProperty("loginId", loginId);
    e.setProperty("password", specialPasswordEncryptor(password));
    ds.put(e);
}

稍后我想在有人尝试登录时通过loginId搜索用户实体。但问题是String属性没有编入索引。

过去我使用像这样的添加过滤器,它起作用了:

public Entity findUserByLoginId(String loginId) {

    Query query = new Query("User").addFilter("loginId",Query.FilterOperator.EQUAL, loginId);   
    Entity eUser = datastore.prepare(query).asSingleEntity();
    return eUser;
}

但是不推荐使用addFilter。我已经尝试过其他方法,但仍然遇到String属性未编入索引的问题,因此我无法在loginId上搜索。

有人能指出我正确的方向吗? 感谢

1 个答案:

答案 0 :(得分:1)

字符串属性肯定是can be indexed,除非它们超过1500个字符(javadoc)。

要进行过滤,您需要使用setFilter(),如下所示:

    Query query = new Query("User").setFilter(
            new FilterPredicate("loginId", FilterOperator.EQUAL, loginId));