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

时间:2014-06-23 10:48:01

标签: java elasticsearch

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

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

我们使用java http请求用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","其他提交": "值"}

我们查询" Ann Foo Eoo"从ES获得name_id,但我们不需要所有的点击。

我们将从ElasticSearch中查询300万个不同的doc_name。

实际上,我们只需要最匹配的结果,而不关心得分是多少。 附上我的术语查询.minimum_match取决于poiName的大小。

(ps.minimum_match = Math.ceil(poiName的术语大小)/ 2)

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

}

0 个答案:

没有答案