use of co.elastic.clients.elasticsearch._types.query_dsl.Query 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.query_dsl.Query 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);
}
}
use of co.elastic.clients.elasticsearch._types.query_dsl.Query in project syncope by apache.
the class ElasticsearchAnySearchDAO method getQuery.
protected Query getQuery(final AssignableCond cond) {
Realm realm = check(cond);
List<Query> queries = new ArrayList<>();
if (cond.isFromGroup()) {
realmDAO.findDescendants(realm).forEach(current -> queries.add(new Query.Builder().term(QueryBuilders.term().field("realm").value(FieldValue.of(current.getFullPath())).build()).build()));
} else {
for (Realm current = realm; current.getParent() != null; current = current.getParent()) {
queries.add(new Query.Builder().term(QueryBuilders.term().field("realm").value(FieldValue.of(current.getFullPath())).build()).build());
}
queries.add(new Query.Builder().term(QueryBuilders.term().field("realm").value(FieldValue.of(realmDAO.getRoot().getFullPath())).build()).build());
}
return new Query.Builder().disMax(QueryBuilders.disMax().queries(queries).build()).build();
}
use of co.elastic.clients.elasticsearch._types.query_dsl.Query in project syncope by apache.
the class ElasticsearchAnySearchDAOTest method getAdminRealmsFilter_realm.
@Test
public void getAdminRealmsFilter_realm() throws IOException {
// 1. mock
Realm root = mock(Realm.class);
when(root.getFullPath()).thenReturn(SyncopeConstants.ROOT_REALM);
when(realmDAO.findByFullPath(SyncopeConstants.ROOT_REALM)).thenReturn(root);
when(realmDAO.findDescendants(root)).thenReturn(List.of(root));
// 2. test
Set<String> adminRealms = Set.of(SyncopeConstants.ROOT_REALM);
Triple<Optional<Query>, Set<String>, Set<String>> filter = searchDAO.getAdminRealmsFilter(AnyTypeKind.USER, adminRealms);
assertThat(new Query.Builder().disMax(QueryBuilders.disMax().queries(new Query.Builder().term(QueryBuilders.term().field("realm").value(FieldValue.of(SyncopeConstants.ROOT_REALM)).build()).build()).build()).build()).usingRecursiveComparison().isEqualTo(filter.getLeft().get());
assertEquals(Set.of(), filter.getMiddle());
assertEquals(Set.of(), filter.getRight());
}
use of co.elastic.clients.elasticsearch._types.query_dsl.Query in project opensearch-java by opensearch-project.
the class ApiConventionsTest method builderIntervals.
@Test(expected = TransportException.class)
public void builderIntervals() throws Exception {
OpenSearchClient client = new OpenSearchClient(transport);
// tag::builder-intervals
SearchResponse<SomeApplicationData> results = client.search(_0 -> _0.query(_1 -> _1.intervals(_2 -> _2.field("my_text").allOf(_3 -> _3.ordered(true).intervals(_4 -> _4.match(_5 -> _5.query("my favorite food").maxGaps(0).ordered(true))).intervals(_4 -> _4.anyOf(_5 -> _5.intervals(_6 -> _6.match(_7 -> _7.query("hot water"))).intervals(_6 -> _6.match(_7 -> _7.query("cold porridge")))))))), // <1>
SomeApplicationData.class);
// end::builder-intervals
}
Aggregations