This is opensearch-java 2.2.0:
I am looking at how to translate the RestHighLevelClient in Java to using the new client, but I do not see how to programmatically build up a query in code and then apply it without using the immutable builder constructs (or even by using them). Or do I just drop back to the other library to do these kind of things?
Here is a partial code example just showing how I currently build up a query from provided search criteria at runtime:
RestHighLevelClient client = OpenSearchHelper.getInstance().getClient();
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.timeout(new TimeValue(15, TimeUnit.SECONDS));
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
if (StringUtils.isNotBlank(criteria.getFullTextSearch().trim())) {
String temp = StringHelper.SplitWords(criteria.getFullTextSearch().toLowerCase());
String words[] = temp.split("\\s+");
for (String word : words)
boolQuery = boolQuery.must(QueryBuilders.prefixQuery("fulltextsearch", word));
} else {
boolQuery = boolQuery.must(QueryBuilders.matchAllQuery());
}
if (criteria.getFilters() != null) {
for (SearchFilterField filter : criteria.getFilters()) {
if ((filter != null) && StringUtils.isNotBlank(filter.getFieldName())) {
String fieldName = filter.getFieldName().toLowerCase();
if (filter.getFieldValue().equals(_ISNULL)) {
boolQuery = boolQuery.mustNot(QueryBuilders.existsQuery(fieldName));
} else if (filter.getFieldValue().equals(_ISNOTNULL)) {
boolQuery = boolQuery.must(QueryBuilders.existsQuery(fieldName));
} else if (filter.getMustNotMatch()) {
boolQuery = boolQuery.mustNot(QueryBuilders.termQuery(fieldName, ParseFieldValue(filter)));
} else {
if (filter.getFieldValue().contains(_WILDCARD)) {
String temp = StringHelper.SplitWords(filter.getFieldValue().toLowerCase().replace(_WILDCARD, " "));
String words[] = temp.split("\\s+");
for (String word : words)
boolQuery = boolQuery.must(QueryBuilders.prefixQuery(fieldName, word));
} else if (StringUtils.isNotBlank(filter.getMinValue()) || StringUtils.isNotBlank(filter.getMaxValue())) {
if (StringUtils.isBlank(filter.getMinValue())) {
filter.setMinValue("0");
}
if (StringUtils.isBlank(filter.getMaxValue())) {
filter.setMaxValue("9999");
}
SearchFilterField beginFilter = new SearchFilterField();
beginFilter.setFieldName(fieldName);
beginFilter.setFieldValue(filter.getMinValue());
SearchFilterField endFilter = new SearchFilterField();
endFilter.setFieldName(fieldName);
endFilter.setFieldValue(filter.getMaxValue());
boolQuery = boolQuery.filter(QueryBuilders.rangeQuery(fieldName).from(ParseFieldValue(beginFilter)).to(ParseFieldValue(endFilter)));
} else {
boolQuery = boolQuery.must(QueryBuilders.termQuery(fieldName, ParseFieldValue(filter)));
}
}
}
}
}
if (StringUtils.isNotBlank(criteria.getDateRangeBegin()) && StringUtils.isNotBlank(criteria.getDateRangeEnd()))
{
try {
ZonedDateTime beginDate = DateHelper.fixTimeZoneAndReturnZonedTime(criteria.getDateRangeBegin());
ZonedDateTime endDate = DateHelper.fixTimeZoneAndReturnZonedTime(criteria.getDateRangeEnd());
if (beginDate.isBefore(endDate) || beginDate.equals(endDate)) {
boolQuery = boolQuery.filter(QueryBuilders.rangeQuery(criteria.getDateRangeField().toLowerCase()).from(beginDate).to(endDate));
}
} catch (Exception err) {
throw new BadRequestException(400, "The begin or end date range filter requested in the search criteria is not in a valid date format or the end date range does not come after the beginning date range.");
}
}
results.setFilterApplied(criteria);
searchSourceBuilder = searchSourceBuilder
.from(Math.max(0, criteria.getCurrentPage() - 1) * Math.min(criteria.getPageSize(), 9999));
searchSourceBuilder = searchSourceBuilder.size(Math.min(criteria.getPageSize(), 9999));
searchSourceBuilder = searchSourceBuilder.query(boolQuery);
if (StringUtils.isNotBlank(criteria.getSortByField())) {
if (String.class.getSimpleName().equalsIgnoreCase(GetFieldTypeByName(criteria.getSortByField()))) {
searchSourceBuilder = searchSourceBuilder.sort(new FieldSortBuilder(criteria.getSortByField().toLowerCase() + _KW).order(criteria.getSortAsc() ? SortOrder.ASC : SortOrder.DESC));
} else {
searchSourceBuilder = searchSourceBuilder.sort(new FieldSortBuilder(criteria.getSortByField().toLowerCase()).order(criteria.getSortAsc() ? SortOrder.ASC : SortOrder.DESC));
}
}
searchRequest.source(searchSourceBuilder);