From 955dda988e0ff3b41ba6d7e6807cfaf3912db54c Mon Sep 17 00:00:00 2001 From: Christian Koch <54853932+ckoch-cars@users.noreply.github.com> Date: Wed, 12 Jul 2023 13:15:13 -0500 Subject: [PATCH] support bulk delete requests When the encoded struct 'document' is appended to a bulk request, it causes the bulk request to fail. --- lib/elasticsearch/indexing/bulk.ex | 15 ++++++++++++++- test/elasticsearch/indexing/bulk_test.exs | 7 +++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/elasticsearch/indexing/bulk.ex b/lib/elasticsearch/indexing/bulk.ex index f1a4aec..0cde656 100644 --- a/lib/elasticsearch/indexing/bulk.ex +++ b/lib/elasticsearch/indexing/bulk.ex @@ -48,10 +48,23 @@ defmodule Elasticsearch.Index.Bulk do {"title":null,"doctype":{"name":"post"},"author":null} \"\"\" + iex> Bulk.encode!(Cluster, %Post{id: "my-id"}, "my-index", "delete") + \"\"\" + {"delete":{"_index":"my-index","_id":"my-id"}} + \"\"\" + iex> Bulk.encode!(Cluster, 123, "my-index") ** (Protocol.UndefinedError) protocol Elasticsearch.Document not implemented for 123 of type Integer """ - def encode!(cluster, struct, index, action \\ "create") do + def encode!(cluster, struct, index, action \\ "create") + + def encode!(cluster, struct, index, "delete") do + config = Cluster.Config.get(cluster) + header = header(config, "delete", index, struct) + "#{header}\n" + end + + def encode!(cluster, struct, index, action) do config = Cluster.Config.get(cluster) header = header(config, action, index, struct) diff --git a/test/elasticsearch/indexing/bulk_test.exs b/test/elasticsearch/indexing/bulk_test.exs index b736375..7893ad6 100644 --- a/test/elasticsearch/indexing/bulk_test.exs +++ b/test/elasticsearch/indexing/bulk_test.exs @@ -87,4 +87,11 @@ defmodule Elasticsearch.Index.BulkTest do "\"_routing\":\"123\"" end end + + describe ".encode!/4" do + test "'delete' omits the struct from the body" do + assert "{\"delete\":{\"_routing\":\"123\",\"_index\":\"my-index\",\"_id\":\"my-id\"}}\n" == + Bulk.encode!(Cluster, %Comment{id: "my-id", post_id: "123"}, "my-index", "delete") + end + end end