"1" 但它不起作用。我在数据存储区查询框中-6ren">
gpt4 book ai didi

java - GQL 查询问题,Google 数据存储。多个条件以及大于和小于运算符的错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:24:31 24 4
gpt4 key购买 nike

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

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

但它不起作用。我在数据存储区查询框中收到此错误:

GQL query error: Your Datastore does not have the composite index (developer-supplied) required for this query.

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

no matching index found. recommended index is:\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);

最佳答案

您收到的错误是因为您尝试的查询需要 Composite indexes默认情况下不可用。它们必须在 index.yaml 内指定.

文章Creating index files这与发布的内容有所不同,专门针对在灵活环境中运行的 Java 应用程序。

有两种方法可以创建 index.yaml :

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

然后,一旦你有了 index.yamlapp.yaml 相同的目录,您可以使用 gcloud preview app deploy index.yaml 部署它从那个目录。此过程简要记录在 Deploying the index file 中.

我还建议阅读 Organizing yaml Configuration Files .

关于java - GQL 查询问题,Google 数据存储。多个条件以及大于和小于运算符的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37950706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com