title: How to install redisearch module in GCP memorystore redis instance
body: <p>I need to install the RediSearch module on top of a GCP memorystore redis instance.</p>
  
  <h2>I followed the steps:</h2>
  
  <p><code>docker run -p 6379:6379 redislabs/redisearch:latest</code></p>
  
  <p>I pushed this docker image to a Kubernetes cluster and exposed the external IP. I used that external IP and the 6379 port as <a href="https://oss.redislabs.com/redisearch/java_client.html" rel="nofollow noreferrer">configuration for my application</a> but I'm not able to connect to RediSearch.</p>
  
  <h2>code:</h2>
  
  <pre><code>import java.io.IOException;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Map;
  import java.util.Set;
  import org.apache.beam.sdk.Pipeline;
  import org.apache.beam.sdk.PipelineResult;
  import org.apache.beam.sdk.options.Default;
  import org.apache.beam.sdk.options.Description;
  import org.apache.beam.sdk.options.PipelineOptions;
  import org.apache.beam.sdk.options.PipelineOptionsFactory;
  import org.apache.beam.sdk.transforms.Create;
  import org.apache.beam.sdk.transforms.DoFn;
  import org.apache.beam.sdk.transforms.ParDo;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  import io.redisearch.client.Client;
  import io.redisearch.*;
  
  
  public class RediSearch {
  
  
  
      static Client client = new Client("testdoc1", "clusteripaddress", 8097);
      private static final Logger LOG = LoggerFactory.getLogger(RediSearch.class);
  
      public interface Options extends PipelineOptions {
  
          @Description("gcp project id.")
          @Default.String("XXXX")
          String getProjectId();
          void setProjectId(String projectId);
      }
  
      public static PipelineResult run(Options options) throws IOException {
  
          Pipeline pipeline = Pipeline.create(options);
  
          pipeline.apply(Create.of("test"))
          .apply(ParDo.of(new DoFn&lt;String, String&gt;() {
              private static final long serialVersionUID = 1L;
              @ProcessElement
              public void processElement(ProcessContext c) throws Exception {     
                  String pubsubmsg = c.element();                 
  
                  Schema sc = new Schema()
                  .addTextField("title", 5.0)
                  .addTextField("body", 1.0)
                  .addNumericField("price");
  
              client.createIndex(sc, Client.IndexOptions.Default());
  
              Map&lt;String, Object&gt; fields = new HashMap&lt;String, Object&gt;();
              fields.put("title", "hello world");
              fields.put("body", "lorem ipsum");
              fields.put("price", 800);
              fields.put("price", 1337);
              fields.put("price", 2000);
  
              client.addDocument("searchdoc3", fields);
  
              SearchResult[] res = client.searchBatch(new Query("hello world").limit(0, 5).setWithScores());      
  
              for (Document d : res[0].docs) {
                  LOG.info("redisearchlog{}",d.getId().startsWith("search"));
                  LOG.info("redisearchlog1{}",d.getProperties());
                  LOG.info("redisearchlog2{}",d.toString());
              }
  
  
              }
          }));    
  
  
          return pipeline.run();
      }
  
      public static void main(String[] args) throws IOException {
  
          Options options = PipelineOptionsFactory.fromArgs(args).as(Options.class);
          run(options);
  
      }
  }
  </code></pre>
  
  <h2>Error :</h2>
  
  <pre><code>redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
  at redis.clients.jedis.util.Pool.getResource(Pool.java:59)
  at redis.clients.jedis.JedisPool.getResource(JedisPool.java:234)
  at redis.clients.jedis.JedisPool.getResource(JedisPool.java:15)
  at io.redisearch.client.Client._conn(Client.java:137)
  at io.redisearch.client.Client.getAllConfig(Client.java:275)
  at com.testing.redisearch.RediSearch$1.processElement(RediSearch.java:59)
  Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host xxxxxxxxxxx:6379
  at redis.clients.jedis.Connection.connect(Connection.java:204)
  at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:100)
  at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1894)
  at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:117)
  at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:889)
  at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:424)
  at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:349)
  at redis.clients.jedis.util.Pool.getResource(Pool.java:50)
  at redis.clients.jedis.JedisPool.getResource(JedisPool.java:234)
  at redis.clients.jedis.JedisPool.getResource(JedisPool.java:15)
  at io.redisearch.client.Client._conn(Client.java:137)
  at io.redisearch.client.Client.getAllConfig(Client.java:275)
  at com.testing.redisearch.RediSearch$1.processElement(RediSearch.java:59)
  at com.testing.redisearch.RediSearch$1$DoFnInvoker.invokeProcessElement(Unknown Source)
  at org.apache.beam.runners.dataflow.worker.repackaged.org.apache.beam.runners.core.SimpleDoFnRunner.invokeProcessElement(SimpleDoFnRunner.java:218)
  at org.apache.beam.runners.dataflow.worker.repackaged.org.apache.beam.runners.core.SimpleDoFnRunner.processElement(SimpleDoFnRunner.java:183)
  at org.apache.beam.runners.dataflow.worker.SimpleParDoFn.processElement(SimpleParDoFn.java:335)
  at org.apache.beam.runners.dataflow.worker.util.common.worker.ParDoOperation.process(ParDoOperation.java:44)
  at org.apache.beam.runners.dataflow.worker.util.common.worker.OutputReceiver.process(OutputReceiver.java:49)
  at org.apache.beam.runners.dataflow.worker.util.common.worker.ReadOperation.runReadLoop(ReadOperation.java:201)
  at org.apache.beam.runners.dataflow.worker.util.common.worker.ReadOperation.start(ReadOperation.java:159)
  at org.apache.beam.runners.dataflow.worker.util.common.worker.MapTaskExecutor.execute(MapTaskExecutor.java:77)
  at org.apache.beam.runners.dataflow.worker.BatchDataflowWorker.executeWork(BatchDataflowWorker.java:411)
  at org.apache.beam.runners.dataflow.worker.BatchDataflowWorker.doWork(BatchDataflowWorker.java:380)
  at org.apache.beam.runners.dataflow.worker.BatchDataflowWorker.getAndPerformWork(BatchDataflowWorker.java:305)
  at org.apache.beam.runners.dataflow.worker.DataflowBatchWorkerHarness$WorkerThread.doWork(DataflowBatchWorkerHarness.java:140)
  at org.apache.beam.runners.dataflow.worker.DataflowBatchWorkerHarness$WorkerThread.call(DataflowBatchWorkerHarness.java:120)
  at org.apache.beam.runners.dataflow.worker.DataflowBatchWorkerHarness$WorkerThread.call(DataflowBatchWorkerHarness.java:107)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  at java.lang.Thread.run(Thread.java:748)
  Caused by: java.net.SocketTimeoutException: connect timed out
  at java.net.PlainSocketImpl.socketConnect(Native Method)
  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
  at java.net.Socket.connect(Socket.java:589)
  at redis.clients.jedis.Connection.connect(Connection.java:181)
  ... 31 more
  </code></pre>
  
  <p>Any solution is appreciated.</p>