如果使用 Golang 的 Elasticsearch 中已经存在文档,则不要插入文档

Dont insert document if already exists in Elasticsearch with Golang

我是 golang 的新手,在 Elasticsearch 中插入具有相同 ID 的新文档时遇到困难。到目前为止,我可以在索引中正确插入文档,但如果文档的 ID 重复,时间戳就会更新(因为这是唯一发生变化的东西)。但是,我要做的不是更新文档,换句话说,什么都不做。

在 Python 的情况下,为了完成这个我做了以下事情:

es = Elasticsearch(
            [elastic_url],
            http_auth=(elastic_user, elastic_password),
            verify_certs=True,
        )

return es.create(index=index_name, id=document_id, body=data, ignore=409)

在 golang 中,我使用以下代码:

req := esapi.IndexRequest{
            Index:      "test_index",
            DocumentID: "2",
            Body:       strings.NewReader(data),
            Refresh:    "false",
        }

        
res, err := req.Do(ctx, es)

能提供一些帮助就太棒了!提前致谢!

esapi 中有一个 API 可用于检查特定索引中是否存在文档 ID。

ExistRequest - 通过检查此请求响应的状态代码,我们可以确认该文档 ID 是否存在(如果存在则为 200,如果不存在则为 404)

// prepare existence checking request
req := esapi.ExistsRequest{
    Index:      index,
    DocumentID: id,
}

// send existence checking request
// client here is *elastic.Client
ctx := context.Background()
resp, err := req.Do(ctx, client)
if err != nil {
    // handle error
}

status := resp.StatusCode
if status == 200 {
    fmt.Println("Exist")
} else if status == 404 {
    fmt.Println("Not found")
}