如何有效删除Google App Engine搜索API索引

时间:2019-02-13 03:38:06

标签: google-app-engine gae-search google-app-engine-go

我在这里找到了一些相似的问题,但没有可靠的答案。

我看到一些googler建议

  

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

不幸的是,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 

有人可以告诉我如何有效地删除Google App引擎Search API索引,但要花这么多钱?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

简短的回答是“否”。

使用GCP并不能完全有效地一次性删除完整的搜索索引。 他们自己在"Best Practices"中建议的唯一有效方法是删除每个index.delete()方法调用(在Java和Python应用引擎sdk中)200个文档的批处理。

令人失望的是,GO SDK甚至也不支持此功能,并且每次调用仅允许删除一个文档。来自GCP的惨痛支持!

因此,如果您的索引已增长到一些不错的GB,您将被迫浪费您的美元和天数,或者更好地说是清理GCP留下的混乱局面,这需要自费。请注意,巨大的索引> 10GB会花费您很多钱。

现在,如何在GO运行时中做到这一点。

请勿使用GO运行时

更好地,用相同的projectId在Java或Python中编写微服务,并将这些运行时与SDK /客户端库一起使用,以唯一有效的方式删除索引(每次调用200个),GCP提供。因此,使用App Engine的解决方案非常有限且从本质上讲是承担成本的解决方案。亲爱的,必须忍受它:)

PS。我一年前就创建了一个bug/issue。尚未采取任何行动:)

答案 2 :(得分:-1)

正如您提到的,目前删除索引为only available for Java 8

由于您正在使用GO,因此目前无法删除索引,但是您可以删除其中一部分的文档以减少cost

要从索引中删除文档,您可以按照以下示例here

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)
}