mirror of https://github.com/apache/druid.git
parent
dc69e4f631
commit
eedd6a1b9e
|
@ -19,6 +19,7 @@
|
|||
|
||||
package io.druid.query.search;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.metamx.common.guava.nary.BinaryFn;
|
||||
|
@ -32,18 +33,22 @@ import java.util.TreeSet;
|
|||
|
||||
/**
|
||||
*/
|
||||
public class SearchBinaryFn implements BinaryFn<Result<SearchResultValue>, Result<SearchResultValue>, Result<SearchResultValue>>
|
||||
public class SearchBinaryFn
|
||||
implements BinaryFn<Result<SearchResultValue>, Result<SearchResultValue>, Result<SearchResultValue>>
|
||||
{
|
||||
private final SearchSortSpec searchSortSpec;
|
||||
private final QueryGranularity gran;
|
||||
private final int limit;
|
||||
|
||||
public SearchBinaryFn(
|
||||
SearchSortSpec searchSortSpec,
|
||||
QueryGranularity granularity
|
||||
QueryGranularity granularity,
|
||||
int limit
|
||||
)
|
||||
{
|
||||
this.searchSortSpec = searchSortSpec;
|
||||
this.gran = granularity;
|
||||
this.limit = limit;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -65,7 +70,13 @@ public class SearchBinaryFn implements BinaryFn<Result<SearchResultValue>, Resul
|
|||
results.addAll(Lists.newArrayList(arg2Vals));
|
||||
|
||||
return (gran instanceof AllGranularity)
|
||||
? new Result<SearchResultValue>(arg1.getTimestamp(), new SearchResultValue(Lists.newArrayList(results)))
|
||||
? new Result<SearchResultValue>(
|
||||
arg1.getTimestamp(), new SearchResultValue(
|
||||
Lists.newArrayList(
|
||||
Iterables.limit(results, limit)
|
||||
)
|
||||
)
|
||||
)
|
||||
: new Result<SearchResultValue>(
|
||||
gran.toDateTime(gran.truncate(arg1.getTimestamp().getMillis())),
|
||||
new SearchResultValue(Lists.newArrayList(results))
|
||||
|
|
|
@ -99,7 +99,7 @@ public class SearchQueryQueryToolChest extends QueryToolChest<Result<SearchResul
|
|||
)
|
||||
{
|
||||
SearchQuery query = (SearchQuery) input;
|
||||
return new SearchBinaryFn(query.getSort(), query.getGranularity());
|
||||
return new SearchBinaryFn(query.getSort(), query.getGranularity(), query.getLimit());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@ public class SearchBinaryFnTest
|
|||
)
|
||||
);
|
||||
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new LexicographicSearchSortSpec(), QueryGranularity.ALL).apply(r1, r2);
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new LexicographicSearchSortSpec(), QueryGranularity.ALL, Integer.MAX_VALUE).apply(r1, r2);
|
||||
Assert.assertEquals(expected.getTimestamp(), actual.getTimestamp());
|
||||
assertSearchMergeResult(expected.getValue(), actual.getValue());
|
||||
}
|
||||
|
@ -138,7 +138,7 @@ public class SearchBinaryFnTest
|
|||
)
|
||||
);
|
||||
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new LexicographicSearchSortSpec(), QueryGranularity.DAY).apply(r1, r2);
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new LexicographicSearchSortSpec(), QueryGranularity.DAY, Integer.MAX_VALUE).apply(r1, r2);
|
||||
Assert.assertEquals(expected.getTimestamp(), actual.getTimestamp());
|
||||
assertSearchMergeResult(expected.getValue(), actual.getValue());
|
||||
}
|
||||
|
@ -162,7 +162,7 @@ public class SearchBinaryFnTest
|
|||
|
||||
Result<SearchResultValue> expected = r1;
|
||||
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new LexicographicSearchSortSpec(), QueryGranularity.ALL).apply(r1, r2);
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new LexicographicSearchSortSpec(), QueryGranularity.ALL, Integer.MAX_VALUE).apply(r1, r2);
|
||||
Assert.assertEquals(expected.getTimestamp(), actual.getTimestamp());
|
||||
assertSearchMergeResult(expected.getValue(), actual.getValue());
|
||||
}
|
||||
|
@ -210,7 +210,7 @@ public class SearchBinaryFnTest
|
|||
)
|
||||
);
|
||||
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new LexicographicSearchSortSpec(), QueryGranularity.ALL).apply(r1, r2);
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new LexicographicSearchSortSpec(), QueryGranularity.ALL, Integer.MAX_VALUE).apply(r1, r2);
|
||||
Assert.assertEquals(expected.getTimestamp(), actual.getTimestamp());
|
||||
assertSearchMergeResult(expected.getValue(), actual.getValue());
|
||||
}
|
||||
|
@ -258,7 +258,7 @@ public class SearchBinaryFnTest
|
|||
)
|
||||
);
|
||||
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new StrlenSearchSortSpec(), QueryGranularity.ALL).apply(r1, r2);
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new StrlenSearchSortSpec(), QueryGranularity.ALL, Integer.MAX_VALUE).apply(r1, r2);
|
||||
Assert.assertEquals(expected.getTimestamp(), actual.getTimestamp());
|
||||
assertSearchMergeResult(expected.getValue(), actual.getValue());
|
||||
}
|
||||
|
@ -282,7 +282,38 @@ public class SearchBinaryFnTest
|
|||
|
||||
Result<SearchResultValue> expected = r1;
|
||||
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new LexicographicSearchSortSpec(), QueryGranularity.ALL).apply(r1, r2);
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new LexicographicSearchSortSpec(), QueryGranularity.ALL, Integer.MAX_VALUE).apply(r1, r2);
|
||||
Assert.assertEquals(expected.getTimestamp(), actual.getTimestamp());
|
||||
assertSearchMergeResult(expected.getValue(), actual.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMergeLimit(){
|
||||
Result<SearchResultValue> r1 = new Result<SearchResultValue>(
|
||||
currTime,
|
||||
new SearchResultValue(
|
||||
ImmutableList.<SearchHit>of(
|
||||
new SearchHit(
|
||||
"blah",
|
||||
"foo"
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
Result<SearchResultValue> r2 = new Result<SearchResultValue>(
|
||||
currTime,
|
||||
new SearchResultValue(
|
||||
ImmutableList.<SearchHit>of(
|
||||
new SearchHit(
|
||||
"blah2",
|
||||
"foo2"
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
Result<SearchResultValue> expected = r1;
|
||||
Result<SearchResultValue> actual = new SearchBinaryFn(new LexicographicSearchSortSpec(), QueryGranularity.ALL, 1).apply(r1, r2);
|
||||
Assert.assertEquals(expected.getTimestamp(), actual.getTimestamp());
|
||||
assertSearchMergeResult(expected.getValue(), actual.getValue());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue