现在情况是我们希望在短时间内从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
}
}
}