【发布时间】:2016-03-03 19:16:41
【问题描述】:
问题
在向数据存储区查询属性“imdbUrl”并按属性“created”排序时遇到“找不到匹配的索引”异常。
我在 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();
然后我尝试通过运行以下查询来检索实体:
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);
我希望使用给定的“imdbUrl”检索 FilmData,按“created”排序。
反而有一个例外:
HTTP 错误 500
访问 /rest/query/ 时出现问题。原因:
没有找到匹配的索引。原因:
com.google.gcloud.datastore.DatastoreException:找不到匹配的索引。
仅查询一个属性可以正常工作,但过滤和排序 - 失败。
如here 所述 - 我创建了一个 index.yaml 并将其放入我的 WEB-INF 文件夹中,以创建一个复杂的 2 属性索引。这没有帮助。异常仍然存在。
有什么想法吗?
indexes:
- kind: FilmData
ancestor: no
properties:
- name: imdbUrl
- name: created
direction: desc
【问题讨论】:
标签: google-app-engine google-cloud-datastore