"未找到匹配的索引"当使用" filter"进行查询时和" orderBy"

时间:2016-03-03 19:16:42

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

问题
我找到了"找不到匹配的索引" 异常,当查询属性的数据存储区时," 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

1 个答案:

答案 0 :(得分:2)

在再次尝试此代码之前,请确保索引已完成构建。您可以在开发人员控制台中检查索引状态(数据存储&gt;索引)。