【问题标题】:elastic search query using curl in java在java中使用curl的弹性搜索查询
【发布时间】:2017-02-16 05:49:59
【问题描述】:

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

 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 运行查询。

【问题讨论】:

    标签: java curl elasticsearch


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      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 连接的常用方法,它与系统无关。

      【讨论】:

      • 我正在使用 Windows
      • @ShivyeshAgnihotri 在这种情况下。将 env 数组替换为:{ "curl=/path/to/curl.exe" } 或类似的东西。
      • @ShivyeshAgnihotri 你也可以试试Runtime.getRuntime().exec(new String[] {"A://path/to/curl.exe", "-XPOST", "\"http://35.160.73.241:9201/products/_search\"", "-d", "\"{\"query\":{\"match\":{\"campaign_id\":\"12239\"}}}\""})
      • 我现在没有收到异常,但是我将如何获得查询结果?
      • @ShivyeshAgnihotri 您可以使用process.getInputStream() 获取进程的输入流并从中读取。您可以找到更多详细信息HERE
      【解决方案3】:

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

      这里有一些例子: Java Code Examples for org.elasticsearch.index.query.QueryBuilders

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-31
        • 1970-01-01
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-09
        相关资源
        最近更新 更多