我有以下查询,我可以通过命令行运行:
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运行查询。
答案 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