有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

弹性搜索1.3。从Java调用自定义REST端点

我目前正在构建一个elasticsearch plugin,它公开一个REST端点(从这个post开始)

我可以用curl调用我的端点,如下所示:

curl -X POST 'http://my-es:9200/lt-dev_terminology_v1/english/_terminology?pretty=-d '{ 
   "segment": "database", 
   "analyzer": "en_analyzer"
}

我的问题是如何使用传输客户端从java调用相同的端点?你能给我指一些教程吗


共 (1) 个答案

  1. # 1 楼答案

    我建议你去看看。这对你来说应该是一个很好的起点

    让我总结一下:

    考虑到以下参数:

    String clustername = "...";
    String clientTransportHost = "...";
    Integer clientTransportPort= "...";
    String clientIndex = "...";
    String indexType = "...";
    

    当然,您可以使用希望使用的设置替换点

    然后定义集群Settings

    Settings settings = ImmutableSettings.settingsBuilder()
            .put("cluster.name", clustername).build();
    

    实例化TransportClient对象:

        TransportClient client =  new TransportClient(settings);
    client.addTransportAddress(new InetSocketTransportAddress(clientTransportHost, clientTransportPort));
    

    您可以使用以下方法验证连接:

    private void verifyConnection(TransportClient client) {
        ImmutableList<DiscoveryNode> nodes = client.connectedNodes();
        if (nodes.isEmpty()) {
            throw new ElasticsearchException(
                    "No nodes available. Verify ES is running!");
        } else {
            log.info("connected to nodes: " + nodes.toString());
        }
    }   
    

    PS:使用日志。info()方法必须实例化记录器

    因此,现在您可以使用验证方法:

    verifyConnection(client);
    

    完成所有步骤后,您现在可以根据示例准备搜索:

    SearchResponse response = client.prepareSearch(clientIndex)
                .setTypes(indexType)
                                .addFields("...", "...")
                .setSearchType(SearchType.DEFAULT)
                                .execute()
                                .actionGet();
    

    PS:在Elasticsearch 1.3上测试