Java ElasticSearch-如何快速查询3000万文档中的一个结果
现在的情况是,我们希望在短时间内从ElasticSearch搜索300万次。 为了测试,我们设置了一个Es集群,它有4核cpu和16G内存,这将需要8个小时。 我们使用的查询是:Java ElasticSearch-如何快速查询3000万文档中的一个结果,java,
elasticsearch,Java,
elasticsearch,现在的情况是,我们希望在短时间内从ElasticSearch搜索300万次。 为了测试,我们设置了一个Es集群,它有4核cpu和16G内存,这将需要8个小时。 我们使用的查询是: GET XXX/TYPE/_search { "query": { "match": { "poiName": { "query": "XXXXX" , "operator": "or" } } } } 我们使用JavaHTTP请求来使用hadoop查询
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\u name:An Foo Eoo,name\u id:123456,other field:value}
我们从ES查询Ann Foo Eoo以获取名称id,但我们不需要所有点击
我们将从ElasticSearch查询300万个不同的文档名
事实上,我们只需要最匹配的结果,而不在乎分数是多少。
附加我的术语查询。最小匹配取决于名称的大小
ps.最小匹配=poiName的Math.ceilterms大小/2
GET XXX/TYPE/_search
{
"query": {
"terms": {
"poiName": [
"An",
"Foo",
"Eoo"
],
"minimum_match":2
}
}
}
这就像在我的索引中搜索300万个不同的词一样吗?是的,我们将搜索300万个不同的词。你能更广泛地解释你的任务吗?若您查询包含300万个术语的字符串,它将返回按分数排序的文档。你需要这个吗?或者您只想按特定术语筛选文档。也许有可能对您的结构进行非规范化,并创建类似术语组、术语超级组的内容,以减少适用术语的数量?好的,我将解释我的任务并更新我的术语查询