在java中使用curl的弹性搜索查询

时间:2017-02-16 05:50:00

标签: java curl elasticsearch

我有以下查询,我可以通过命令行运行:

 curl -XPOST "http://35.160.73.241:9201/products/_search" -d 
                                  "{"query":{"match":{"campaign_id":"12239"}}}"

我需要使用java运行上面的查询。我使用以下代码:

     try {
            Process process = Runtime.getRuntime().exec("curl -XPOST
                        \"http://35.160.73.241:9201/products/_search\" -d
                       \"{\"query\":{\"match\":{\"campaign_id\":\"12239\"}}}\"");
            int resultCode = process.waitFor();
            System.out.println(resultCode);
            if (resultCode == 0) {
                // all is good
            } 
        } catch (Exception ex) {
            // process cause
            ex.printStackTrace();
        }

但它给了我以下例外:

java.io.IOException: Cannot run program "curl": CreateProcess 
                     error=2, The system cannot find the file specified

请帮我用Java运行查询。

3 个答案:

答案 0 :(得分:0)

您需要设置环境。试试这个:

String env = new String[] { "PATH=/bin:/usr/bin/" };
String[] cmd = new String[] {"curl", "-XPOST", "\"http://35.160.73.241:9201/products/_search\"", "-d", "\"{\"query\":{\"match\":{\"campaign_id\":\"12239\"}}}\""}
Process process = Runtime.getRuntime().exec(cmd, env);

如果您使用Linux系统,这将有效。

更好的解决方案是使用HttpURLConnection。这是创建HTTP连接的常用方法,它与系统无关。

答案 1 :(得分:0)

为什么不使用java client进行弹性搜索而不是使用curl。有明显的优势,例如能够轻松构建查询以及了解群集状态

答案 2 :(得分:0)

您可以使用QueryBuilders查询elasticsearch。 org.elasticsearch.index.query.QueryBuilders

以下是一些例子: Java Code Examples for org.elasticsearch.index.query.QueryBuilders