use of co.elastic.clients.elasticsearch._types.ElasticsearchException in project core-ng-project by neowu.
the class ElasticSearchTypeImpl method complete.
@Override
public List<String> complete(CompleteRequest request) {
var watch = new StopWatch();
long esTook = 0;
String index = request.index == null ? this.index : request.index;
int options = 0;
try {
var suggest = Suggester.of(builder -> {
builder.text(request.prefix);
for (String field : request.fields) {
builder.suggesters(field, s -> s.completion(c -> c.field(field).skipDuplicates(Boolean.TRUE).size(request.limit)));
}
return builder;
});
var response = elasticSearch.client.search(builder -> builder.index(index).suggest(suggest).source(s -> s.fetch(Boolean.FALSE)), documentClass);
esTook = response.took() * 1_000_000;
List<String> suggestions = response.suggest().values().stream().flatMap(Collection::stream).flatMap(suggestion -> suggestion.completion().options().stream()).map(CompletionSuggestOption::text).distinct().collect(Collectors.toList());
options = suggestions.size();
return suggestions;
} catch (IOException e) {
throw new UncheckedIOException(e);
} catch (ElasticsearchException e) {
throw elasticSearch.searchException(e);
} finally {
long elapsed = watch.elapsed();
ActionLogContext.track("elasticsearch", elapsed, options, 0);
logger.debug("complete, options={}, esTook={}, elapsed={}", options, esTook, elapsed);
checkSlowOperation(elapsed);
}
}
use of co.elastic.clients.elasticsearch._types.ElasticsearchException in project core-ng-project by neowu.
the class ElasticSearchImpl method searchException.
// convert elasticsearch-java client exception, to append detailed error message
SearchException searchException(ElasticsearchException e) {
ErrorCause causedBy = e.error().causedBy();
var builder = new StringBuilder(e.getMessage());
if (causedBy != null) {
builder.append("\nreason: ").append(causedBy.reason());
}
return new SearchException(builder.toString(), e);
}
use of co.elastic.clients.elasticsearch._types.ElasticsearchException in project core-ng-project by neowu.
the class ElasticSearchTypeImpl method forEach.
@Override
public void forEach(ForEach<T> forEach) {
var watch = new StopWatch();
long start = System.nanoTime();
long esClientTook = 0;
long esServerTook = 0;
validate(forEach);
Time keepAlive = Time.of(t -> t.time(forEach.scrollTimeout.toNanos() + "nanos"));
String index = forEach.index == null ? this.index : forEach.index;
int totalHits = 0;
try {
var response = elasticSearch.client.search(builder -> builder.index(index).scroll(keepAlive).query(forEach.query).sort(s -> s.field(f -> f.field("_doc"))).size(forEach.limit), documentClass);
var holder = new ScrollIdHolder();
holder.scrollId = response.scrollId();
while (true) {
esServerTook += response.took() * 1_000_000;
var hits = response.hits().hits();
esClientTook += System.nanoTime() - start;
if (hits.isEmpty())
break;
totalHits += hits.size();
for (var hit : hits) {
forEach.consumer.accept(hit.source());
}
start = System.nanoTime();
response = elasticSearch.client.scroll(builder -> builder.scrollId(holder.scrollId).scroll(keepAlive), documentClass);
holder.scrollId = response.scrollId();
}
} catch (IOException e) {
throw new UncheckedIOException(e);
} catch (ElasticsearchException e) {
throw elasticSearch.searchException(e);
} finally {
long elapsed = watch.elapsed();
ActionLogContext.track("elasticsearch", elapsed, totalHits, 0);
logger.debug("forEach, totalHits={}, esServerTook={}, esClientTook={}, elapsed={}", totalHits, esServerTook, esClientTook, elapsed);
}
}
use of co.elastic.clients.elasticsearch._types.ElasticsearchException in project core-ng-project by neowu.
the class ElasticSearchTypeImpl method delete.
@Override
public boolean delete(DeleteRequest request) {
var watch = new StopWatch();
String index = request.index == null ? this.index : request.index;
boolean deleted = false;
try {
DeleteResponse response = elasticSearch.client.delete(builder -> builder.index(index).id(request.id));
deleted = response.result() == Result.Deleted;
return deleted;
} catch (IOException e) {
throw new UncheckedIOException(e);
} catch (ElasticsearchException e) {
throw elasticSearch.searchException(e);
} finally {
long elapsed = watch.elapsed();
ActionLogContext.track("elasticsearch", elapsed, 0, deleted ? 1 : 0);
logger.debug("delete, index={}, id={}, elapsed={}", index, request.id, elapsed);
checkSlowOperation(elapsed);
}
}
use of co.elastic.clients.elasticsearch._types.ElasticsearchException in project core-ng-project by neowu.
the class ElasticSearchTypeImpl method search.
@Override
public SearchResponse<T> search(SearchRequest request) {
var watch = new StopWatch();
validate(request);
long esTook = 0;
String index = request.index == null ? this.index : request.index;
int hits = 0;
try {
var searchRequest = co.elastic.clients.elasticsearch.core.SearchRequest.of(builder -> {
builder.index(index).query(request.query).aggregations(request.aggregations).sort(request.sorts).searchType(request.type).from(request.skip).size(request.limit);
if (request.trackTotalHitsUpTo != null)
builder.trackTotalHits(t -> t.count(request.trackTotalHitsUpTo));
return builder;
});
var response = elasticSearch.client.search(searchRequest, documentClass);
esTook = response.took() * 1_000_000;
hits = response.hits().hits().size();
long total = response.hits().total().value();
List<T> items = response.hits().hits().stream().map(Hit::source).toList();
return new SearchResponse<>(items, total, response.aggregations());
} catch (IOException e) {
throw new UncheckedIOException(e);
} catch (ElasticsearchException e) {
throw elasticSearch.searchException(e);
} finally {
long elapsed = watch.elapsed();
ActionLogContext.track("elasticsearch", elapsed, hits, 0);
logger.debug("search, hits={}, esTook={}, elapsed={}", hits, esTook, elapsed);
checkSlowOperation(elapsed);
}
}
Aggregations