#java #elasticsearch
#java #elasticsearch
Вопрос:
Теперь ситуация такова, что мы хотим выполнить поиск 3 миллиона раз из ElasticSearch за короткое время. Для тестирования мы настроили один Es-кластер с 4-ядерным процессором и 16 ГБ памяти.А это займет около 8 часов. Запрос, который мы используем, это:
GET XXX/TYPE/_search
{
"query": {
"match": {
"poiName": {
"query": "XXXXX"
, "operator": "or"
}
}
}
}
И мы используем java http-запрос для запроса ElasticSearch с помощью hadoop.
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 filed»:»значение»}.
Мы запрашиваем «Ann Foo Eoo» из ES, чтобы получить name_id, но нам не нужны все хиты.
Мы запросим 3 миллиона разных doc_name из ElasticSearch.
На самом деле, нам нужен только максимальный результат матча, и нам все равно, какой будет счет. Приложите мой запрос условий .Значение minimum_match зависит от размера poiName.
(ps. minimum_match = Math.ceil(размер терминов в poiName) / 2 )
GET XXX/TYPE/_search
{
"query": {
"terms": {
"poiName": [
"An",
"Foo",
"Eoo"
],
"minimum_match":2
}
}
}
Комментарии:
1. это что-то вроде «поиска по 3 разным миллионам терминов» в моем индексе?
2. Да, мы будем искать 3 разных миллиона терминов
3. не могли бы вы объяснить свою задачу более широко? если вы запрашиваете строку из 3 миллионов терминов, она возвращает документы, отсортированные по количеству баллов. Вам это нужно? или вы хотите просто фильтровать документы по определенным условиям. Может быть, можно денормализовать вашу структуру и создать что-то вроде «группы терминов», «супергруппы терминов», чтобы уменьшить количество применимых терминов?
4. Хорошо, я объясню свою задачу и обновлю свой запрос term