work on CatRank
This commit is contained in:
parent
7df18d5646
commit
b5168b17e5
2 changed files with 89 additions and 3 deletions
|
@ -9,16 +9,78 @@ public class CatRank
|
||||||
extends TestCase<SearchResultList.Factory, SearchResultList.Builder, SearchResultList.Reader,
|
extends TestCase<SearchResultList.Factory, SearchResultList.Builder, SearchResultList.Reader,
|
||||||
SearchResultList.Factory, SearchResultList.Builder, SearchResultList.Reader, Integer> {
|
SearchResultList.Factory, SearchResultList.Builder, SearchResultList.Reader, Integer> {
|
||||||
|
|
||||||
|
static class ScoredResult implements Comparable<ScoredResult> {
|
||||||
|
public double score;
|
||||||
|
public SearchResult.Reader result;
|
||||||
|
|
||||||
|
public ScoredResult(double score, SearchResult.Reader result) {
|
||||||
|
this.score = score; this.result = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int compareTo(ScoredResult other) {
|
||||||
|
if (this.score < other.score) {
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static final String URL_PREFIX = "http://example.com";
|
||||||
|
|
||||||
public Integer setupRequest(Common.FastRand rng, SearchResultList.Builder request) {
|
public Integer setupRequest(Common.FastRand rng, SearchResultList.Builder request) {
|
||||||
return 0;
|
int count = rng.nextLessThan(1000);
|
||||||
|
int goodCount = 0;
|
||||||
|
|
||||||
|
StructList.Builder<SearchResult.Builder> list = request.initResults(count);
|
||||||
|
for (int i = 0; i < list.size(); ++i) {
|
||||||
|
SearchResult.Builder result = list.get(i);
|
||||||
|
result.setScore(1000.0 - (double)i);
|
||||||
|
int urlSize = rng.nextLessThan(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ...
|
||||||
|
|
||||||
|
return goodCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleRequest(SearchResultList.Reader request, SearchResultList.Builder response) {
|
public void handleRequest(SearchResultList.Reader request, SearchResultList.Builder response) {
|
||||||
|
java.util.ArrayList<ScoredResult> scoredResults = new java.util.ArrayList<ScoredResult>();
|
||||||
|
|
||||||
|
for (SearchResult.Reader result : request.getResults()) {
|
||||||
|
double score = result.getScore();
|
||||||
|
if (result.getSnippet().toString().contains(" cat ")) {
|
||||||
|
score *= 10000.0;
|
||||||
|
}
|
||||||
|
if (result.getSnippet().toString().contains(" dog ")) {
|
||||||
|
score /= 10000.0;
|
||||||
|
}
|
||||||
|
scoredResults.add(new ScoredResult(score, result));
|
||||||
|
}
|
||||||
|
|
||||||
|
java.util.Collections.sort(scoredResults);
|
||||||
|
|
||||||
|
StructList.Builder<SearchResult.Builder> list = response.initResults(scoredResults.size());
|
||||||
|
for (int i = 0; i < list.size(); ++i) {
|
||||||
|
SearchResult.Builder item = list.get(i);
|
||||||
|
ScoredResult result = scoredResults.get(i);
|
||||||
|
item.setScore(result.score);
|
||||||
|
item.setUrl(result.result.getUrl());
|
||||||
|
item.setSnippet(result.result.getSnippet());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean checkResponse(SearchResultList.Reader response, Integer expectedGoodCount) {
|
public boolean checkResponse(SearchResultList.Reader response, Integer expectedGoodCount) {
|
||||||
return true;
|
int goodCount = 0;
|
||||||
|
for (SearchResult.Reader result : response.getResults()) {
|
||||||
|
if (result.getScore() > 1001.0) {
|
||||||
|
goodCount += 1;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return goodCount == expectedGoodCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ public final class StructList {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class Builder<T> {
|
public static final class Builder<T> implements Iterable<T> {
|
||||||
public final ListBuilder builder;
|
public final ListBuilder builder;
|
||||||
public final FromStructBuilder<T> factory;
|
public final FromStructBuilder<T> factory;
|
||||||
|
|
||||||
|
@ -65,6 +65,30 @@ public final class StructList {
|
||||||
return this.factory.fromStructBuilder(this.builder.getStructElement(index));
|
return this.factory.fromStructBuilder(this.builder.getStructElement(index));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public final class Iterator implements java.util.Iterator<T> {
|
||||||
|
public Builder<T> list;
|
||||||
|
public int idx = 0;
|
||||||
|
public Iterator(Builder<T> list) {
|
||||||
|
this.list = list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T next() {
|
||||||
|
return list.factory.fromStructBuilder(list.builder.getStructElement(idx++));
|
||||||
|
}
|
||||||
|
public boolean hasNext() {
|
||||||
|
return idx < list.size();
|
||||||
|
}
|
||||||
|
public void remove() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public java.util.Iterator<T> iterator() {
|
||||||
|
return new Iterator(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue