Я использую Java_API для извлечения записей из ElasticSearch, для извлечения 100000 документов (запись / строка) в приложении Java требуется примерно 5 секунд.
Это медленно для ElasticSearch?или это нормально?
Вот настройки индекса:
![enter image description here](https://i.stack.imgur.com/siXPD.png)
Я пытался повысить производительность, но безрезультатно, вот что я сделал:
Установите для кучи ElasticSearch значение 3 ГБ, оно было 1 ГБ (по умолчанию) -Xms3g
-Xmx3g
Миграция ElasticSearch на SSD с 7200 об / мин HardДиск
Извлечение только одного файла вместо 30
Вот мой код реализации Java
private void getDocuments() {
int counter = 1;
try {
lgg.info("started");
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9300));
SearchResponse scrollResp = client.prepareSearch("ebpp_payments_union").setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(QueryBuilders.matchAllQuery())
.setScroll(new TimeValue(1000))
.setFetchSource(new String[] { "payment_id" }, null)
.setSize(10000)
.get();
do {
for (SearchHit hit : scrollResp.getHits().getHits()) {
if (counter % 100000 == 0) {
lgg.info(counter + "--" + hit.getSourceAsString());
}
counter++;
}
scrollResp = client.prepareSearchScroll(scrollResp.getScrollId())
.setScroll(new TimeValue(60000))
.execute()
.actionGet();
} while (scrollResp.getHits().getHits().length != 0);
client.close();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
Я знаю, что TransportClient
устарело, я пробовал также RestHighLevelClient
, но это ничего не меняет.
Знаете ли вы, как получить лучшую производительность?
Должен ли я что-то изменить в ElasticSearch или изменить свой код Java?