问题:
我找到了"找不到匹配的索引" 异常,当查询属性的数据存储区时," imdbUrl"并按属性排序"创建"
我在GAE-Datastore中定义了以下实体:
// Create a Key factory to construct keys associated with this project.
KeyFactory keyFactory = datastore.newKeyFactory().kind("FilmData");
Key key = datastore.allocateId(keyFactory.newKey());
Entity dataEntity = Entity.builder(key)
.set("created", filmData.created)
.set("name", StringValue.builder(filmData.name).indexed(true).build())
.set("rating", DoubleValue.builder(UtilsConvert.toDouble(filmData.imdbRating)).indexed(true).build())
.set("ratingCnt", UtilsConvert.toDouble(filmData.imdbRatingCnt))
.set("imdbUrl", StringValue.builder(filmData.imdbUrl).indexed(true).build())
.build();
然后我尝试通过运行以下查询来检索Enities:
Filter imdbUrlFilter = PropertyFilter.eq("imdbUrl", "http://www.imdb.com/title/tt1431045/");
Query<Entity> query = Query.entityQueryBuilder()
.kind("FilmData")
.filter(imdbUrlFilter)
.orderBy(OrderBy.desc("created"))
.build();
Iterator<Entity> iterator = datastore.run(query);
我希望用给定的&#34; imdbUrl&#34;检索FilmData,按&#34;创建&#34;排序。
相反,有一个例外:
HTTP ERROR 500
Problem accessing /rest/query/. Reason:
no matching index found.
Caused by:
com.google.gcloud.datastore.DatastoreException: no matching index found.
...
确实仅针对一个单一属性进行查询工作正常,但过滤和排序 - 失败。
如上所述here - 我创建了一个 index.yaml 并将其放入我的 WEB-INF 文件夹中,以创建复杂的2属性索引。这没有用。例外仍然存在。
任何想法为什么?
indexes:
- kind: FilmData
ancestor: no
properties:
- name: imdbUrl
- name: created
direction: desc
答案 0 :(得分:2)
在再次尝试此代码之前,请确保索引已完成构建。您可以在开发人员控制台中检查索引状态(数据存储&gt;索引)。