public SearchResponse search(ActivityQuery query, QueryContext options,
@Nullable FilterBuilder domainFilter) {
// Prepare query
SearchRequestBuilder esSearch = getClient()
.prepareSearch(this.getIndexName())
.setTypes(this.getIndexType())
.setIndices(this.getIndexName());
// Integrate Pagination
esSearch.setFrom(options.getOffset());
esSearch.setSize(options.getLimit());
// Sort Date Desc
esSearch.addSort(ActivityNormalizer.LogFields.CREATED_AT.field(), SortOrder.DESC);
AndFilterBuilder filter = FilterBuilders.andFilter();
// implement Type Filtering
OrFilterBuilder typeFilter = FilterBuilders.orFilter();
for (Activity.Type type : query.getTypes()) {
typeFilter.add(FilterBuilders.termFilter(ActivityNormalizer.LogFields.TYPE.field(), type));
}
filter.add(typeFilter);
// Implement date Filter
filter.add(FilterBuilders.rangeFilter(ActivityNormalizer.LogFields.CREATED_AT.field())
.from(query.getSince())
.to(query.getTo()));
// Add any additional domain filter
if (domainFilter != null) {
filter.add(domainFilter);
}
esSearch.setQuery(QueryBuilders.filteredQuery(
QueryBuilders.matchAllQuery(), filter));
if (options.isScroll()) {
esSearch.setSearchType(SearchType.SCAN);
esSearch.setScroll(TimeValue.timeValueMinutes(3));
}
return esSearch.get();
}