This commit is contained in:
aevitas 2023-04-01 13:01:36 +02:00 committed by GitHub
parent ec83d01dca
commit d4245582a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -15,42 +15,38 @@ import com.twitter.search.queryparser.visitors.DetectAnnotationVisitor;
* A visitor that collects node ranks from :r annotation in the query * A visitor that collects node ranks from :r annotation in the query
*/ */
public class QueryRankVisitor extends DetectAnnotationVisitor { public class QueryRankVisitor extends DetectAnnotationVisitor {
private final IdentityHashMap<Query, Integer> nodeToRankMap = Maps.newIdentityHashMap(); private final IdentityHashMap<Query, Integer> nodeToRankMap = Maps.newIdentityHashMap();
public QueryRankVisitor() { public QueryRankVisitor() {
super(Annotation.Type.NODE_RANK); super(Annotation.Type.NODE_RANK);
}
@Override
protected boolean visitBooleanQuery(BooleanQuery query) throws QueryParserException {
if (query.hasAnnotationType(Annotation.Type.NODE_RANK)) {
collectNodeRank(query.getAnnotationOf(Annotation.Type.NODE_RANK).get(), query);
} }
boolean found = false; @Override
for (Query child : query.getChildren()) { protected boolean visitBooleanQuery(BooleanQuery query) throws QueryParserException {
found |= child.accept(this); if (query.hasAnnotationType(Annotation.Type.NODE_RANK)) {
} collectNodeRank(query.getAnnotationOf(Annotation.Type.NODE_RANK).get(), query);
return found; }
}
@Override return query.getChildren().stream().anyMatch(child -> child.accept(this));
protected boolean visitQuery(Query query) throws QueryParserException {
if (query.hasAnnotationType(Annotation.Type.NODE_RANK)) {
collectNodeRank(query.getAnnotationOf(Annotation.Type.NODE_RANK).get(), query);
return true;
} }
return false; @Override
} protected boolean visitQuery(Query query) throws QueryParserException {
if (query.hasAnnotationType(Annotation.Type.NODE_RANK)) {
collectNodeRank(query.getAnnotationOf(Annotation.Type.NODE_RANK).get(), query);
return true;
}
private void collectNodeRank(Annotation anno, Query query) { return false;
Preconditions.checkArgument(anno.getType() == Annotation.Type.NODE_RANK); }
int rank = (Integer) anno.getValue();
nodeToRankMap.put(query, rank);
}
public IdentityHashMap<Query, Integer> getNodeToRankMap() { private void collectNodeRank(Annotation anno, Query query) {
return nodeToRankMap; Preconditions.checkArgument(anno.getType() == Annotation.Type.NODE_RANK);
} int rank = (Integer) anno.getValue();
nodeToRankMap.put(query, rank);
}
public IdentityHashMap<Query, Integer> getNodeToRankMap() {
return nodeToRankMap;
}
} }