diff --git a/app/server/appsmith-plugins/elasticSearchPlugin/plugin.properties b/app/server/appsmith-plugins/elasticSearchPlugin/plugin.properties
new file mode 100644
index 0000000000..2d0f796852
--- /dev/null
+++ b/app/server/appsmith-plugins/elasticSearchPlugin/plugin.properties
@@ -0,0 +1,5 @@
+plugin.id=elasticsearch-plugin
+plugin.class=com.external.plugins.ElasticSearchPlugin
+plugin.version=1.0-SNAPSHOT
+plugin.provider=tech@appsmith.com
+plugin.dependencies=
diff --git a/app/server/appsmith-plugins/elasticSearchPlugin/pom.xml b/app/server/appsmith-plugins/elasticSearchPlugin/pom.xml
new file mode 100644
index 0000000000..8f71ee9fe4
--- /dev/null
+++ b/app/server/appsmith-plugins/elasticSearchPlugin/pom.xml
@@ -0,0 +1,132 @@
+
+
+
+ 4.0.0
+
+ com.external.plugins
+ elasticSearchPlugin
+ 1.0-SNAPSHOT
+
+ elasticSearchPlugin
+
+
+ UTF-8
+ 11
+ ${java.version}
+ ${java.version}
+ elasticsearch-plugin
+ com.external.plugins.ElasticSearchPlugin
+ 1.0-SNAPSHOT
+ tech@appsmith.com
+
+
+
+
+
+
+ org.pf4j
+ pf4j-spring
+ 0.6.0
+ provided
+
+
+
+ com.appsmith
+ interfaces
+ 1.0-SNAPSHOT
+ provided
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.8
+ provided
+
+
+
+ org.elasticsearch.client
+ elasticsearch-rest-client
+ 7.9.2
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+
+ io.projectreactor
+ reactor-test
+ 3.3.5.RELEASE
+ test
+
+
+
+ org.testcontainers
+ testcontainers
+ 1.15.0-rc2
+ test
+
+
+
+ org.testcontainers
+ elasticsearch
+ 1.15.0-rc2
+ test
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+ false
+
+
+
+ ${plugin.id}
+ ${plugin.class}
+ ${plugin.version}
+ ${plugin.provider}
+
+
+
+
+
+
+ package
+
+ shade
+
+
+
+
+
+ maven-dependency-plugin
+
+
+ copy-dependencies
+ package
+
+ copy-dependencies
+
+
+ runtime
+ ${project.build.directory}/lib
+
+
+
+
+
+
+
+
diff --git a/app/server/appsmith-plugins/elasticSearchPlugin/src/main/java/com/external/plugins/ElasticSearchPlugin.java b/app/server/appsmith-plugins/elasticSearchPlugin/src/main/java/com/external/plugins/ElasticSearchPlugin.java
new file mode 100644
index 0000000000..82ef9d9a76
--- /dev/null
+++ b/app/server/appsmith-plugins/elasticSearchPlugin/src/main/java/com/external/plugins/ElasticSearchPlugin.java
@@ -0,0 +1,202 @@
+package com.external.plugins;
+
+import com.appsmith.external.models.ActionConfiguration;
+import com.appsmith.external.models.ActionExecutionResult;
+import com.appsmith.external.models.AuthenticationDTO;
+import com.appsmith.external.models.DatasourceConfiguration;
+import com.appsmith.external.models.DatasourceTestResult;
+import com.appsmith.external.models.Endpoint;
+import com.appsmith.external.pluginExceptions.AppsmithPluginError;
+import com.appsmith.external.pluginExceptions.AppsmithPluginException;
+import com.appsmith.external.plugins.BasePlugin;
+import com.appsmith.external.plugins.PluginExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.Header;
+import org.apache.http.HttpHost;
+import org.apache.http.StatusLine;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.entity.ContentType;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.nio.entity.NStringEntity;
+import org.elasticsearch.client.Request;
+import org.elasticsearch.client.Response;
+import org.elasticsearch.client.RestClient;
+import org.elasticsearch.client.RestClientBuilder;
+import org.pf4j.Extension;
+import org.pf4j.PluginWrapper;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+import reactor.core.publisher.Mono;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class ElasticSearchPlugin extends BasePlugin {
+
+ public ElasticSearchPlugin(PluginWrapper wrapper) {
+ super(wrapper);
+ }
+
+ @Slf4j
+ @Extension
+ public static class ElasticSearchPluginExecutor implements PluginExecutor {
+
+ @Override
+ public Mono execute(RestClient client,
+ DatasourceConfiguration datasourceConfiguration,
+ ActionConfiguration actionConfiguration) {
+ final ActionExecutionResult result = new ActionExecutionResult();
+
+ String body = actionConfiguration.getBody();
+
+ final String path = actionConfiguration.getPath();
+ final Request request = new Request(actionConfiguration.getHttpMethod().toString(), path);
+ ContentType contentType = ContentType.APPLICATION_JSON;
+
+ if (isBulkQuery(path)) {
+ contentType = ContentType.create("application/x-ndjson");
+
+ // If body is a JSON Array, convert it to an ND-JSON string.
+ if (body != null && body.trim().startsWith("[")) {
+ final StringBuilder ndJsonBuilder = new StringBuilder();
+ try {
+ List