java - Elasticsearch 传输客户端连接

标签 java servlets elasticsearch servletcontextlistener elasticsearch-java-api

我正在使用连接到 Elasticsearch 的 Servlet 构建一个搜索 Web 应用程序。我有一个关于 Transport 的问题Elasticsearch 的模块。我使用实现 ServletContextListener 的类中的 TransportClient 打开与 Elasticsearch 的连接。以下是 ElasticsearchServletContextListener 类的代码。

public class ElasticsearchContextListener implements ServletContextListener {

  @Override
  public void contextInitialized(ServletContextEvent servletContextEvent) {
    System.out.println("Starting up!");

    try {
      Client client = TransportClient.builder().build().addTransportAddress(
          new InetSocketTransportAddress(InetAddress.getByName("IP-address"),9300));
    //Storing the client connection in a static variable
      Parameters.setESclient(client);

    } catch (UnknownHostException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  }

  @Override
  public void contextDestroyed(ServletContextEvent servletContextEvent) {
    Parameters.getESclient().close();
    System.out.println("Shutting down!");
  }
}

现在,每当用户搜索查询时,它都会使用在 ServletContextListener 类中初始化的相同“客户端”连接。客户端连接可以同时处理多个请求吗?或者每个用户都需要单独的客户端连接来查询elasticsearch?谢谢您的帮助。

最佳答案

Client 实例能够处理多个调用并处理多个线程。而且您应该只拥有一个客户端实例,因为创建一个客户端实例的成本很高。

关于java - Elasticsearch 传输客户端连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39154629/

相关文章:

elasticsearch - Elasticsearch正则表达式查询

java - 如何使用暂停、线程(任务、服务)模拟队列和堆栈 JavaFX

添加元素时自动对元素进行排序的 Java 列表

java - 禁用基本身份验证?

java - jetty 6 : static content with directory listing

ruby-on-rails - 多模型 Elasticsearch 的分页

java - 为什么我会收到此 SQLException 错误,指出找不到合适的驱动程序?

java - 实例方法 equals()

java - 如何从 servlet 获取响应到 jsp?

elasticsearch - 日期基数直方图