2016-05-24 5 views
0

Я недавно прочитал об Elasticsearch, и я использую Jest для взаимодействия с Amazon Elasticsearch Service. Я смог использовать документы и индексы Jest в ES.ElasticSearch-запрос с использованием JestClient кажется очень медленным

Однако, когда я пытаюсь выполнить запрос (используя логический запрос), я вижу чрезвычайно высокие задержки. Я попытался выполнить POST-запрос, используя POSTMAN, и я вижу, что задержки намного ниже.

Вот пример:

Jest запрос: Учитывая ключ, значение: Возвращает список объектов.

Клиент JestClient;

String query = "{\n" + 
     " \"query\" : \n" + 
     "  {\"bool\": \n" + 
     "   { \"must\": \n" + 
     "    [\n" + 
     "     {\"match\": \n" + 
     "      {\"" + key +"\" : \"" + value + "\"}\n" + 
     "     }\n" + 
     "    ]\n" + 
     "   }\n" + 
     "  }\n" + 
     "}"; 

long startTime, endTime; 

Search search = new Search.Builder(query) 
     // multiple index or types can be added. 
     .addIndex(indexName) 
     .addType(typeName) 
     .build(); 
endTime = System.currentTimeMillis(); 
System.out.println("SearchBuilder: " + (endTime - startTime)); 

startTime = endTime; 
JestResult result = client.execute(search); 
endTime = System.currentTimeMillis(); 

System.out.println("ClientExecute: " + (endTime - startTime)); 

return result.getSourceAsObjectList(<Object>.class); 

Выход: SearchBuilder: 12 ClientExecute: 1193

С другой стороны, используя ПОЧТАЛЬОН: меня есть запрос POST с телом:

{ 
    "query" : {"bool": { "must": [{"match": {key : value}}]}} 
} 

Это выполняется на: es.ap-southeast-1.es.amazonaws.com/index/_search Выход:

" взял ": 1, "timed_out": ложь, "_shards": { "всего": 10, "успешно": 10, "Failed": 0 },

Я попытался с помощью Searchsourcebuilder, как Что ж. Но безрезультатно. Я использую правильный API?

Спасибо! Tejas

+0

У меня такая же проблема. Запросы от #JEST за 11 секунд, когда CURL с той же машины занимает 109 мс. Вероятно, выйдя из JEST –

+0

, где находится ваша машина ec2? Если он находится в ближайшем кластере, вы увидите проблемы. Лучше всего запустить код для проверки времени в одном кластере, а не на локальном рабочем столе. –

+0

это в VPC в aws. –

ответ

1

Эта линия

"took": 1, "timed_out": false, "_shards": { "total": 10, "successful": 10, "failed": 0 } 

Сообщает вам, как долго он взял фактический двигатель ES для выполнения запроса, но она не включает каких-либо задержек в отправке запроса или возврата результата к вам над интернет. В вашем примере JestClient вы являетесь infact, включая это время, поэтому вполне возможно, что, хотя ваш пример JestClient выполняется с одинаковой скоростью, разница во времени - это просто время, затрачиваемое на передачу и получение данных.

Я не знаком с Jest, но я использовал Nest в C# (который, как я полагаю, почти идентичен), и в результате вы должны иметь возможность получать те же «взятые», «timed_out» статистики внутри возвращаемый объект.