Google App Engine错误:未找到匹配的索引。 (JAVA)

我正在编写一个查询,但它总是说“找不到匹配的索引”。 我不知道为什么。 我的代码如下:

Query query = pm.newQuery(Classified.class); query.setFilter("emp_Id == emp"); query.setOrdering("upload_date desc"); query.declareParameters("String emp"); List results = (List)query.execute(session.getAttribute("emp_Id").toString()); 

         

我已经添加了上面的索引,但它没有帮助。

我相信您需要配置数据存储区索引 。 在WEB-INF/appengine-generated/datastore-indexes-auto.xml ,您可能已经为Eclipse生成了一个,您只需将其复制到WEB-INF/datastore-indexes.xml并再次部署。

因为这需要在互联网上的某个地方……

当我发现这个时,我踢了自己。错误是你没有匹配查询想要执行的索引。 您可以为每个实体提供多个索引。

在Logcat中,它会告诉您要设置的索引以及元素需要的顺序。

即,如果错误说它想要(它不会很好地格式化):

     

然后Project – > war – > WEB-INF – > appengine-generated – > datastore-indexes-auto.xml并准确添加。 然后,重新部署项目。

接下来进入您的Google云端控制台,查看数据存储 – >索引。 它应该说正在准备索引(如果您可以终止所有连接的应用程序并关闭控制台中的实例,这会更快)。

一旦它进入其他索引列表,重新运行您的应用程序,它不会再出现关于索引的错误。

去吧绅士/女士们

您定义的索引必须按照返回的顺序保存所有可能的结果。 您的查询要求输入由upload_date排序的特定emp_Id,但您的索引主要按类别排序。

尝试从索引定义中删除类别行, 或者交换categoryupload_date的顺序,以使upload_date成为索引的主要排序顺序。 如果代码的另一部分依赖于类别行,则可能必须创建两个单独的索引(这会产生一些计算成本)。

编辑:请参阅下面的评论尼克约翰逊重新。 额外参数。