【发布时间】:2018-11-23 05:39:20
【问题描述】:
我正在使用一些方法部署一个小后端。其中一个进行了简单的查询以检索对象列表。方法是这样的:
@ApiMethod(path = "getMessagesByCity", name = "getMessagesByCity", httpMethod = ApiMethod.HttpMethod.POST)
public MessageResponse getMessagesByCity(@Named("City_id") Long city) {
MessageResponse response = new MessageResponse();
List<Message> message = ofy().load().type(Message.class).filter("city", city).list();
response.response = 200;
return response;
}
这是 Message 类:
@Entity
public class Message {
@Id
private Long id;
private String name;
@Index
private Long city;
...
}
我已经阅读了很多帖子,所有帖子都提到这可能是因为 datastore-indexes.xml 没有自动更新。然而,谷歌文档这样说(https://cloud.google.com/appengine/docs/standard/python/config/indexconfig):
应用程序进行的每个 Cloud Datastore 查询都需要一个 对应的索引。简单查询的索引,例如查询 单个属性,是自动创建的。
因此,我认为与索引相关的文件对我来说不是必需的。
如果我使用简单查询执行方法“getMessagesByCity”:
List<Message> message = ofy().load().type(Message.class).filter("city", city).list();
后端返回错误 503 并带有此日志消息:
"com.google.appengine.api.datastore.DatastoreNeedIndexException: 否 找到匹配索引。缺少索引,但我们无法判断 由于 App Engine SDK 中的错误,您是哪一个。如果您的查询仅 包含您最有可能需要复合索引的等式过滤器 这些过滤器中引用的所有属性。”
有什么想法吗?我该如何解决?
【问题讨论】:
标签: java google-app-engine google-cloud-firestore google-cloud-endpoints-v2