Skip to content

Commit

Permalink
Merge pull request apache#24 from bloomberg/master-ltr-plugin-develop…
Browse files Browse the repository at this point in the history
…-mergeFeatures

LTR apache#23: Merged Feature weight and scorer
  • Loading branch information
diegoceccarelli committed Jul 6, 2016
2 parents a43a5b5 + 65338b8 commit ceccc79
Show file tree
Hide file tree
Showing 13 changed files with 214 additions and 325 deletions.
Expand Up @@ -27,10 +27,7 @@
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.util.SmallFloat;
import org.apache.solr.ltr.feature.norm.Normalizer;
import org.apache.solr.ltr.ranking.Feature;
import org.apache.solr.ltr.ranking.FeatureScorer;
import org.apache.solr.ltr.ranking.FeatureWeight;
import org.apache.solr.ltr.util.CommonLTRParams;
import org.apache.solr.ltr.util.FeatureException;
import org.apache.solr.ltr.util.NamedParams;
Expand Down Expand Up @@ -78,20 +75,15 @@ public void init(String name, NamedParams params, int id)
@Override
public FeatureWeight createWeight(IndexSearcher searcher, boolean needsScores, SolrQueryRequest request, Query originalQuery, Map<String,String> efi)
throws IOException {
return new FieldLengthFeatureWeight(searcher, name, params, norm, id, request, originalQuery, efi);
return new FieldLengthFeatureWeight(searcher, request, originalQuery, efi);
}

@Override
public String toString(String f) {
return "FieldLengthFeature [field:" + field + "]";

}

public class FieldLengthFeatureWeight extends FeatureWeight {

public FieldLengthFeatureWeight(IndexSearcher searcher, String name,
NamedParams params, Normalizer norm, int id, SolrQueryRequest request, Query originalQuery, Map<String,String> efi) {
super(FieldLengthFeature.this, searcher, name, params, norm, id, request, originalQuery, efi);
public FieldLengthFeatureWeight(IndexSearcher searcher,
SolrQueryRequest request, Query originalQuery, Map<String,String> efi) {
super(FieldLengthFeature.this, searcher, request, originalQuery, efi);
}

@Override
Expand Down Expand Up @@ -133,11 +125,6 @@ public float score() throws IOException {
return numTerms;
}

@Override
public String toString() {
return "FieldLengthFeature [name=" + name + " field=" + field + "]";
}

@Override
public int docID() {
return itr.docID();
Expand Down
Expand Up @@ -27,10 +27,7 @@
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.solr.ltr.feature.norm.Normalizer;
import org.apache.solr.ltr.ranking.Feature;
import org.apache.solr.ltr.ranking.FeatureScorer;
import org.apache.solr.ltr.ranking.FeatureWeight;
import org.apache.solr.ltr.util.CommonLTRParams;
import org.apache.solr.ltr.util.FeatureException;
import org.apache.solr.ltr.util.NamedParams;
Expand Down Expand Up @@ -60,20 +57,15 @@ public void init(String name, NamedParams params, int id)
@Override
public FeatureWeight createWeight(IndexSearcher searcher, boolean needsScores, SolrQueryRequest request, Query originalQuery, Map<String,String> efi)
throws IOException {
return new FieldValueFeatureWeight(searcher, name, params, norm, id, request, originalQuery, efi);
return new FieldValueFeatureWeight(searcher, request, originalQuery, efi);
}

@Override
public String toString(String f) {
return "FieldValueFeature [field:" + fieldName + "]";

}

public class FieldValueFeatureWeight extends FeatureWeight {

public FieldValueFeatureWeight(IndexSearcher searcher, String name,
NamedParams params, Normalizer norm, int id, SolrQueryRequest request, Query originalQuery, Map<String,String> efi) {
super(FieldValueFeature.this, searcher, name, params, norm, id, request, originalQuery, efi);
public FieldValueFeatureWeight(IndexSearcher searcher,
SolrQueryRequest request, Query originalQuery, Map<String,String> efi) {
super(FieldValueFeature.this, searcher, request, originalQuery, efi);
}

@Override
Expand Down Expand Up @@ -128,11 +120,6 @@ public float score() throws IOException {
return 0;
}

@Override
public String toString() {
return "FieldValueFeature [name=" + name + " fields=" + fields + "]";
}

@Override
public int docID() {
return itr.docID();
Expand Down
Expand Up @@ -22,48 +22,41 @@

import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.Explanation;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.Weight;
import org.apache.solr.ltr.feature.norm.Normalizer;
import org.apache.solr.ltr.ranking.Feature;
import org.apache.solr.ltr.ranking.FeatureScorer;
import org.apache.solr.ltr.ranking.FeatureWeight;
import org.apache.solr.ltr.util.CommonLTRParams;
import org.apache.solr.ltr.util.NamedParams;
import org.apache.solr.request.SolrQueryRequest;

public class OriginalScoreFeature extends Feature {

@Override
public OriginalScoreWeight createWeight(IndexSearcher searcher,
boolean needsScores, SolrQueryRequest request, Query originalQuery, Map<String,String> efi) throws IOException {
return new OriginalScoreWeight(searcher, name, params, norm, id, request, originalQuery, efi);
return new OriginalScoreWeight(searcher, request, originalQuery, efi);

}

public class OriginalScoreWeight extends FeatureWeight {

final Weight w;

public OriginalScoreWeight(IndexSearcher searcher, String name,
NamedParams params, Normalizer norm, int id, SolrQueryRequest request, Query originalQuery, Map<String,String> efi) throws IOException {
super(OriginalScoreFeature.this, searcher, name, params, norm, id, request, originalQuery, efi);
public OriginalScoreWeight(IndexSearcher searcher,
SolrQueryRequest request, Query originalQuery, Map<String,String> efi) throws IOException {
super(OriginalScoreFeature.this, searcher, request, originalQuery, efi);
w = searcher.createNormalizedWeight(originalQuery, true);
};


@Override
public Explanation explain(LeafReaderContext context, int doc)
throws IOException {
// Explanation e = w.explain(context, doc);
final Scorer s = w.scorer(context);
s.iterator().advance(doc);
final float score = s.score();
return Explanation.match(score, "original score query: " + originalQuery);
public String toString() {
return "OriginalScoreFeature [query:" + originalQuery.toString() + "]";
}



@Override
public FeatureScorer scorer(LeafReaderContext context) throws IOException {

Expand All @@ -88,11 +81,6 @@ public float score() throws IOException {
: originalScorer.score();
}

@Override
public String toString() {
return "OriginalScoreFeature [query:" + originalQuery.toString() + "]";
}

@Override
public int docID() {
return originalScorer.docID();
Expand Down
Expand Up @@ -33,12 +33,8 @@
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
import org.apache.solr.ltr.feature.norm.Normalizer;
import org.apache.solr.ltr.ranking.Feature;
import org.apache.solr.ltr.ranking.FeatureScorer;
import org.apache.solr.ltr.ranking.FeatureWeight;
import org.apache.solr.ltr.util.FeatureException;
import org.apache.solr.ltr.util.NamedParams;
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.search.QParser;
Expand All @@ -51,17 +47,17 @@ public class SolrFeature extends Feature {
@Override
public FeatureWeight createWeight(IndexSearcher searcher, boolean needsScores, SolrQueryRequest request, Query originalQuery, Map<String,String> efi)
throws IOException {
return new SolrFeatureWeight(searcher, name, params, norm, id, request, originalQuery, efi);
return new SolrFeatureWeight(searcher, request, originalQuery, efi);
}

public class SolrFeatureWeight extends FeatureWeight {
Weight solrQueryWeight;
Query query;
List<Query> queryAndFilters;

public SolrFeatureWeight(IndexSearcher searcher, String name,
NamedParams params, Normalizer norm, int id, SolrQueryRequest request, Query originalQuery, Map<String,String> efi) throws IOException {
super(SolrFeature.this, searcher, name, params, norm, id, request, originalQuery, efi);
public SolrFeatureWeight(IndexSearcher searcher,
SolrQueryRequest request, Query originalQuery, Map<String,String> efi) throws IOException {
super(SolrFeature.this, searcher, request, originalQuery, efi);
try {
final String df = (String) getParams().get(CommonParams.DF);
final String defaultParser = (String) getParams().get("defaultParser");
Expand All @@ -80,7 +76,7 @@ public SolrFeatureWeight(IndexSearcher searcher, String name,

solrQuery = macroExpander.expand(solrQuery);
if (solrQuery == null) {
throw new FeatureException(this.getClass().getCanonicalName()+" requires efi parameter that was not passed in request.");
throw new FeatureException(this.getClass().getSimpleName()+" requires efi parameter that was not passed in request.");
}

final SolrQueryRequest req = makeRequest(request.getCore(), solrQuery,
Expand Down Expand Up @@ -216,11 +212,6 @@ public float score() throws IOException {
return solrScorer.score();
}

@Override
public String toString() {
return "SolrFeature [function:" + q + "]";
}

@Override
public DocIdSetIterator iterator() {
return itr;
Expand Down Expand Up @@ -288,11 +279,6 @@ public float score() throws IOException {
return 1f;
}

@Override
public String toString() {
return "SolrFeature [function:" + fq + "]";
}

@Override
public DocIdSetIterator iterator() {
return itr;
Expand Down
Expand Up @@ -24,10 +24,7 @@
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.solr.ltr.feature.norm.Normalizer;
import org.apache.solr.ltr.ranking.Feature;
import org.apache.solr.ltr.ranking.FeatureScorer;
import org.apache.solr.ltr.ranking.FeatureWeight;
import org.apache.solr.ltr.util.FeatureException;
import org.apache.solr.ltr.util.NamedParams;
import org.apache.solr.request.SolrQueryRequest;
Expand Down Expand Up @@ -74,22 +71,22 @@ public void init(String name, NamedParams params, int id)
@Override
public FeatureWeight createWeight(IndexSearcher searcher, boolean needsScores, SolrQueryRequest request, Query originalQuery, Map<String,String> efi)
throws IOException {
return new ValueFeatureWeight(searcher, name, params, norm, id, request, originalQuery, efi);
return new ValueFeatureWeight(searcher, request, originalQuery, efi);
}

public class ValueFeatureWeight extends FeatureWeight {

final protected Float featureValue;

public ValueFeatureWeight(IndexSearcher searcher, String name,
NamedParams params, Normalizer norm, int id, SolrQueryRequest request, Query originalQuery, Map<String,String> efi) {
super(ValueFeature.this, searcher, name, params, norm, id, request, originalQuery, efi);
public ValueFeatureWeight(IndexSearcher searcher,
SolrQueryRequest request, Query originalQuery, Map<String,String> efi) {
super(ValueFeature.this, searcher, request, originalQuery, efi);
if (configValueStr != null) {
final String expandedValue = macroExpander.expand(configValueStr);
if (expandedValue != null) {
featureValue = Float.parseFloat(expandedValue);
} else if (required) {
throw new FeatureException(this.getClass().getCanonicalName() + " requires efi parameter that was not passed in request.");
throw new FeatureException(this.getClass().getSimpleName() + " requires efi parameter that was not passed in request.");
} else {
featureValue=null;
}
Expand All @@ -103,10 +100,13 @@ public ValueFeatureWeight(IndexSearcher searcher, String name,
@Override
public FeatureScorer scorer(LeafReaderContext context) throws IOException {
if(featureValue!=null)
return new ValueFeatureScorer(this, featureValue, "ValueFeature");
return new ValueFeatureScorer(this, featureValue);
else
return null;
}




/**
* Default FeatureScorer class that returns the score passed in. Can be used
Expand All @@ -116,14 +116,11 @@ public FeatureScorer scorer(LeafReaderContext context) throws IOException {
public class ValueFeatureScorer extends FeatureScorer {

float constScore;
String featureType;
DocIdSetIterator itr;

public ValueFeatureScorer(FeatureWeight weight, float constScore,
String featureType) {
public ValueFeatureScorer(FeatureWeight weight, float constScore) {
super(weight);
this.constScore = constScore;
this.featureType = featureType;
itr = new MatchAllIterator();
}

Expand All @@ -132,11 +129,6 @@ public float score() {
return constScore;
}

@Override
public String toString() {
return featureType + " [name=" + name + " value=" + constScore + "]";
}

@Override
public int docID() {
return itr.docID();
Expand Down

0 comments on commit ceccc79

Please sign in to comment.