import org.elasticsearch.action.search.SearchRequestBuilder; //导入方法依赖的package包/类
@SuppressWarnings("rawtypes")
private SearchResponse query(UAVHttpMessage data, QueryBuilder queryBuilder, QueryBuilder postFilter,
SortBuilder[] sorts) {
String appid = data.getRequest("appid");
String indexDate = data.getRequest("indexdate");
String currentIndex;
if (indexDate != null) {
// 获得指定的index
currentIndex = this.indexMgr.getIndexByDate(indexDate, appid);
}
else {
// get current index
currentIndex = this.indexMgr.getCurrentIndex(appid);
}
// get logtype for search
SearchRequestBuilder srb = null;
if (StringHelper.isEmpty(data.getRequest("logtype"))) {
srb = client.getClient().prepareSearch(currentIndex).setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
}
else {
String logType = data.getRequest("logtype").replace('.', '_');
srb = client.getClient().prepareSearch(currentIndex).setTypes(logType)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
}
int from = DataConvertHelper.toInt(data.getRequest("from"), -1);
int size = DataConvertHelper.toInt(data.getRequest("size"), -1);
if (from != -1 && size != -1) {
long startLine = DataConvertHelper.toLong(data.getRequest("sline"), -1);
long endLine = DataConvertHelper.toLong(data.getRequest("eline"), -1);
// 判断如果只有endline则需要将结果倒序,取其前100行,然后在返回响应时再逆序回来,从而取到endline前的100行
if (startLine == -1 && endLine > -1) {
srb = srb.addSort("l_timestamp", SortOrder.DESC).addSort("l_num", SortOrder.DESC).setFrom(from)
.setSize(size);
}
else {
srb = srb.setFrom(from).setSize(size);
}
}
srb.setQuery(queryBuilder);
if (postFilter != null) {
srb.setPostFilter(postFilter);
}
if (sorts != null && sorts.length > 0) {
for (SortBuilder sb : sorts) {
srb.addSort(sb);
}
}
SearchResponse sr = srb.get(TimeValue.timeValueMillis(timeout));
return sr;
}