7

我正在尝试查询数据存储区,我的查询如下所示:

SELECT *
FROM mydb
WHERE Latitude = "18.1" AND Number > "1"

但它不起作用。我在 Datastore 查询框中收到此错误:

GQL 查询错误:您的数据存储区没有此查询所需的复合索引(开发人员提供)。

当我运行我的代码时出现这个错误:

没有找到匹配的索引。推荐的索引是:\n- kind: mydb\n properties:\n - name: Location\n - name: Number\n

像这样工作的简单请求:

SELECT *
FROM mydb
WHERE Number > "1" AND Number < "5"

我在这里只访问一个列,也许这就是为什么?

没有,

然后我尝试了这样的请求:

SELECT *
FROM mydb
WHERE Latitude = "18.1" AND Number = "1"

这行得通。

我试图寻找一个解决方案,我遇到了这个页面:https ://cloud.google.com/datastore/docs/tools/indexconfig#Datastore_About_index_yaml

浏览完该页面后,我发现我需要一个 index.yaml 文件。它应该放在一个名为 WEB-INF 的文件夹中。但是我没有这个文件夹。

这是我的代码的一小段:

Query<Entity> query = Query
                .gqlQueryBuilder(Query.ResultType.ENTITY,
                        "SELECT * FROM " + kind + " WHERE Location = @location AND Number <= @number")
                .setBinding("number", "5").setBinding("location", "18.1").build();
QueryResults<Entity> results = datastore.run(query);
4

2 回答 2

5

您得到的错误是因为您尝试的查询需要默认情况下不可用的复合索引。它们必须在index.yaml.

创建索引文件与所发布的有所不同的文章专门针对在灵活环境中运行的 Java 应用程序。

有两种创建方法index.yaml

  1. 按照索引定义中规定的规则和结构手动使用您喜欢的文本编辑器。
  2. 在本地测试时生成文件。这可以使用gcloud beta emulators datastore start命令来完成。您还可以使用该--data-dir <dir>选项来指定生成的index.yaml应写入的位置。

然后,一旦您拥有index.yaml与 相同的目录,您就可以从该目录app.yaml部署它。部署索引文件gcloud preview app deploy index.yaml中简要记录了此过程。

我还建议阅读组织 yaml 配置文件

于 2016-06-21T19:55:15.770 回答
0

如果您仍然对此主题有疑问。确保您添加的属性index.html 正是您需要的。就我而言,我添加了两个数字属性,因为 Datastore 不允许使用多个不等式运算符(大于等),因此您不能同时查询两者。

所以我index只上传了一个新的,它允许我进行查询。

希望它在某种程度上有所帮助,

干杯!

于 2020-01-30T20:22:41.393 回答