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) 个答案