@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response cacheSearch(SearchRequest request) throws Exception
{
LogSearch logSearch = getLogSearch(request.getIndexName());
if ( logSearch == null )
{
return Response.status(Response.Status.NOT_FOUND).build();
}
SearchId searchHandle;
try
{
boolean hasTerms = false;
QueryBuilder builder = QueryBuilder.builder();
if ( (request.getPathPrefix() != null) && (request.getPathPrefix().length() > 0) )
{
hasTerms = true;
builder.pathPrefix(request.getPathPrefix());
}
if ( request.getOperationType() >= 0 )
{
hasTerms = true;
builder.operationType(request.getOperationType());
}
if ( (request.getFirstDate() != null) && (request.getSecondDate() != null) )
{
hasTerms = true;
Date startDate;
Date endDate;
if ( request.getFirstDate().before(request.getSecondDate()) )
{
startDate = request.getFirstDate();
endDate = request.getSecondDate();
}
else
{
startDate = request.getSecondDate();
endDate = request.getFirstDate();
}
Calendar endOfDayEndDate = Calendar.getInstance();
endOfDayEndDate.setTime(endDate);
endOfDayEndDate.set(Calendar.HOUR_OF_DAY, 23);
endOfDayEndDate.set(Calendar.MINUTE, 59);
endOfDayEndDate.set(Calendar.SECOND, 59);
endDate = endOfDayEndDate.getTime();
builder.dateRange(startDate, endDate);
}
Query query = hasTerms ? builder.build(QueryBuilder.Type.AND) : null;
String id = logSearch.cacheSearch(query, request.getReuseHandle(), request.getMaxResults());
searchHandle = new SearchId(id);
}
finally
{
context.getExhibitor().getIndexCache().releaseLogSearch(logSearch.getFile());
}
return Response.ok(searchHandle).build();
}