使用数据存储区java API查询WHERE子句(2 - 3个过滤器)时,Google云数据存储区无法返回所有记录

时间:2018-02-28 22:15:25

标签: java google-cloud-datastore gqlquery

我的数据存储种类已编入5列。

当我使用java API查询具有3个索引过滤器的Kind时:

RunQueryRequest.Builder request = RunQueryRequest.newBuilder();
 request.setPartitionId(partitionId);
 GqlQuery gqlQuery= GqlQuery.newBuilder()
                     .setQueryString(query)
                     .setAllowLiterals(true)
                     .build();

 request.setGqlQuery(gqlQuery);
 return datastore.runQuery(request.build());

使用:

检索

runQueryResponse.getBatch().getEntityResultsList();

方法只返回1-2条记录,但从UI查询时,同一查询提供的记录超过1000条。

使用的依赖:

<dependency>
        <groupId>com.google.cloud.datastore</groupId>
        <artifactId>datastore-v1-protos</artifactId>
        <version>1.5.0</version>
    </dependency>
    <dependency>
        <groupId>com.google.cloud.datastore</groupId>
        <artifactId>datastore-v1-proto-client</artifactId>
        <version>1.6.0</version>
    </dependency>

我们如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

通过添加数据存储API的最新版本依赖性解决(3月5日和18日)

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-datastore</artifactId>
  <version>1.14.0</version>
</dependency>

并使用它的方法创建GQLQuery对象

GqlQuery<Entity> gqlQuery = Query.newGqlQueryBuilder(Query.ResultType.ENTITY, query)
                     .setNamespace("nameSpace").setAllowLiteral(true).build();

将其传递给

datastore.run(gqlQuery)