【问题标题】:Connecting to Elasticsearch with java transport client. Get request returns nothing使用 java 传输客户端连接到 Elasticsearch。获取请求不返回任何内容
【发布时间】:2015-07-30 10:00:06
【问题描述】:

我是 elasticsearch 新手,但我正在尝试从 elasticsearch 文档实现基本的 java Get API。 https://www.elastic.co/guide/en/elasticsearch/client/java-api/1.x/get.html

我正在使用 TransportClient 连接到 elasticsearch。据我了解,TransportClient 使用端口 9300。Elasticsearch 在端口 9200 上。当我使用指定的集群、索引、类型和 ID 调用 get 请求时,我只返回一个空的字段列表。我已经使用 sense 插件在 elasticsearch 中创建了索引,并通过 head 插件对其进行了验证。但是,当我尝试通过我的 java 实现检索这些值时,我什么也得不到。下面是我的部分代码。

public String transportClientToElasticSearch()
{
   Settings settings = ImmutableSettings.settingsBuilder()
           .put("client.transport.sniff", "true")
           .put("cluster.name", "elasticsearch").build();

    Client client = new TransportClient(settings)
            .addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
            //.addTransportAddress(new InetSocketTransportAddress("localhost", 9200));

    client.admin().indices().prepareRefresh("index").execute();

   GetResponse response = client.prepareGet("index", "type", "id")
           .execute()
           .actionGet();

   String elasticResponse = response.getFields().toString();
   return elasticResponse;
}

我最初的想法是,这是由于 TransportClient 和 ES 的端口号不同。有什么想法吗?谢谢你。

【问题讨论】:

  • 您的端口很好,9200 是 HTTP 流量的默认端口,9300 是 TCP 流量的默认端口(即通过 TransportClient)。你能从你的 ES 服务器显示相关日志吗?
  • 嗨@Val,谢谢你的回复。查看日志文件夹,只有 elasticsearch.log 已更新,并且仅在启动 elasticsearch.bat 时才更新。我似乎找不到任何与上述有关的日志语句或文件。
  • 您是否尝试过检索response.getSource(),这应该会生成您的文档字段的映射?
  • 太棒了!那行得通。 response.getSource() 返回指定 Id 的字段。这是我期望从 response.getFields() 返回的。

标签: java spring-mvc elasticsearch


【解决方案1】:

您应该简单地通过response.getSource() 检索字段,这将产生Map<String, Object>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-02
    • 2017-07-05
    • 2021-08-28
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    相关资源
    最近更新 更多