package doser.lucene.query; import java.util.HashMap; import java.util.Map; import org.apache.lucene.search.Query; import org.apache.lucene.search.Weight; /** * LearnToRank clause representing an arbitrary feature query. Additional * criterias may be defined later but are not necessary so far. * * HashMap featuresValues contains all calculated featuresValues. The HashMap * key stores the document number. The Pair integer stores the featureNumber. * * The HashMap has to be resetted after each query. * */ public class LearnToRankClause { class Pair { private final int featureNr; private final float featureValue; Pair(final int docNr, final float featureValue) { featureNr = docNr; this.featureValue = featureValue; } public int getDocNr() { return featureNr; } public float getFeatureValue() { return featureValue; } } private Weight cweight; private final Map<Integer, Float> featureValues; private final boolean mustOccur; private final String name; private Query query; private float weight; public LearnToRankClause(final Query query, final String name, final boolean mustOccur) { this.query = query; this.name = name; weight = 1.0f; this.mustOccur = mustOccur; featureValues = new HashMap<Integer, Float>(); } public void addFeatureValue(final int docBase, final int docNr, final float value) { featureValues.put((docBase + docNr), value); } public void clear() { featureValues.clear(); } public double getFeatureValue(final int docId) { double val = 0f; try { val = featureValues.get(docId); } catch (final NullPointerException e) { val = 0f; } return val; } public String getName() { return name; } public Query getQuery() { return query; } public Weight getW() { return cweight; } public float getWeight() { return weight; } public boolean isMustOccur() { return mustOccur; } public void setQuery(final Query query) { this.query = query; } public void setW(final Weight cweight) { this.cweight = cweight; } public void setWeight(final float weight) { this.weight = weight; } }