有 Java 编程相关的问题?

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

java ElasticSearch如何从3000万个文档中快速查询一个结果

现在的情况是,我们希望在短时间内从ElasticSearch搜索300万次。 为了进行测试,我们设置了一个具有4核cpu和16G内存的Es集群。这大约需要8个小时。 我们使用的查询是:

 GET XXX/TYPE/_search
{
"query": {
"match": {
     "poiName": {
       "query": "XXXXX"
       , "operator": "or"
     }
    }
   }
}

我们使用JavaHTTP请求来使用hadoop查询ElasticSearch

        URL url = new URL(searchUrl);
        con = (HttpURLConnection) url.openConnection();
        con.setDoOutput(true);
        con.setDoInput(true);

        OutputStreamWriter wr= new OutputStreamWriter(con.getOutputStream());
        String query = getQueryJson(field,value);
        wr.write(query);
        wr.flush();
        int HttpResult =con.getResponseCode();
        if(HttpResult ==HttpURLConnection.HTTP_OK){
            BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"utf-8"));
            String line = null;
            while ((line = br.readLine()) != null) {
                sb.append(line + "\n");
            }

            br.close();

        }

事实上,我们只需要一个结果响应。我该如何改进这一点

=========================更新===============================

对于我的任务:

文档类似于{“doc_name”:“An Foo Eoo”,“name_id:123456”,“other field”:“value”}

我们从ES查询“Ann Foo Eoo”以获得名称id,但我们不需要所有点击

我们将从ElasticSearch查询300万个不同的文档名

事实上,我们只需要最匹配的结果,而不在乎分数是多少。 附上我的查询条件。最小_匹配取决于poiName的大小

(ps.minimum_match=Math.ceil(术语名称大小)/2)

GET XXX/TYPE/_search
{
  "query": {
    "terms": {
      "poiName": [
        "An",
        "Foo",
        "Eoo"
      ],
      "minimum_match":2
    }
  }

}

共 (0) 个答案