如果使用 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")
}
我是 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")
}