0

我在这里发现了一些类似的问题,但没有可靠的答案。

我看到一些谷歌用户建议

您可以通过首先使用 index.delete() 从索引中删除所有文档,然后使用 index.delete_schema() 从索引1中删除类型映射来有效地删除索引。

不幸的是,golang sdk 没有“index.delete_schema()”api。我只能通过从索引中获取 itemId 列表来一一删除文档。我们在仪表板中得到了一个令人惊讶的计费状态:

Resource                       Usage           Billable         Price              Cost
Search API Simple Searches  214,748.49 10K Ops  214,748.39  $0.625 / 10K Ops    $134,217.74 

有人能告诉我如何有效地删除谷歌应用引擎搜索 API 索引而不花费这么多钱吗?

4

3 回答 3

1

不幸的是,没有简单的操作可以让您删除整个大型搜索索引而不会产生大量成本,而不是删除整个应用程序(实际上,在某些情况下这可能是一种有效的方法)。

于 2019-02-14T00:43:31.763 回答
0

最简洁的答案是不。

GCP 没有一种非常有效的方法可以一次性删除完整的搜索索引。他们自己在“最佳实践”中建议的唯一有效方法是每次 index.delete() 方法调用(在 Java 和 Python 应用程序引擎 sdk 中)批量删除 200 个文档。

更令人失望的是,GO SDK 甚至也不支持这一点,每次调用只允许删除一个文档。来自 GCP 的支持多么糟糕!

因此,如果您的索引已经增长到一些好的 GB,那么您将被迫消耗您的金钱和时间,或者更好地说是清理 GCP 留下的烂摊子,费用由您自己承担。请注意,巨大的索引> 10GB会花费您很多钱。

现在,如何在 GO 运行时执行此操作。

不要使用 GO 运行时执行此操作

更好的是,在同一个 projectId 下用 Java 或 Python 编写一个微服务,并将这些运行时与他们的 SDK/客户端库一起使用来删除索引,这是 GCP 提供的唯一有效的方法(每次调用 200 个)。所以非常非常有限且本质上成本轴承解决方案与应用程序引擎。必须忍受它,亲爱的:)

PS。一年前我已经创建了一个关于相同的错误/问题。尚未采取任何行动:)

于 2020-09-15T08:34:37.020 回答
-1

正如您所提到的,删除索引目前仅适用于 Java 8

由于您使用的是 GO,目前无法删除索引,但您可以删除属于它的文档以降低成本

要从索引中删除文档,您可以在此处遵循此示例

func deleteHandler(w http.ResponseWriter, r *http.Request) {
        ctx := appengine.NewContext(r)

        index, err := search.Open("users")
        if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
        }

        id := "PA6-5000"
        err = index.Delete(ctx, id)
        if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
        }
        fmt.Fprint(w, "Deleted document: ", id)
}
于 2019-02-13T23:13:11.197 回答