You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by cp...@apache.org on 2016/10/31 20:38:30 UTC
lucene-solr:jira/solr-8542-v2: SOLR-8542: couple of tweaks
Repository: lucene-solr
Updated Branches:
refs/heads/jira/solr-8542-v2 e17a3430f -> ce7a067d5
SOLR-8542: couple of tweaks
* remove unnecessary DocInfo. prefix in DocInfo.
* rename FeatureInfo.setScore to setValue
* remove duplicate scorer method call in ModelWeight.score
* reduce visibility of some LTRScoringQuery inner classes
* reduce member visibility/changeability in LTRScoringQuery.java
* remove ModelWeight's unused member and constructor arg
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/ce7a067d
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/ce7a067d
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/ce7a067d
Branch: refs/heads/jira/solr-8542-v2
Commit: ce7a067d5b06598941f5dc98bc9f5b7a8e4c7e8d
Parents: e17a343
Author: Christine Poerschke <cp...@apache.org>
Authored: Mon Oct 31 18:18:17 2016 +0000
Committer: Christine Poerschke <cp...@apache.org>
Committed: Mon Oct 31 20:34:57 2016 +0000
----------------------------------------------------------------------
.../src/java/org/apache/solr/ltr/DocInfo.java | 6 +-
.../org/apache/solr/ltr/LTRScoringQuery.java | 93 +++++++++++---------
.../apache/solr/ltr/TestLTRScoringQuery.java | 18 ++--
.../solr/ltr/TestSelectiveWeightCreation.java | 16 ++--
4 files changed, 73 insertions(+), 60 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ce7a067d/solr/contrib/ltr/src/java/org/apache/solr/ltr/DocInfo.java
----------------------------------------------------------------------
diff --git a/solr/contrib/ltr/src/java/org/apache/solr/ltr/DocInfo.java b/solr/contrib/ltr/src/java/org/apache/solr/ltr/DocInfo.java
index e285d33..b3dfb9e 100644
--- a/solr/contrib/ltr/src/java/org/apache/solr/ltr/DocInfo.java
+++ b/solr/contrib/ltr/src/java/org/apache/solr/ltr/DocInfo.java
@@ -28,15 +28,15 @@ public class DocInfo extends HashMap<String,Object> {
}
public void setOriginalDocScore(Float score) {
- put(DocInfo.ORIGINAL_DOC_SCORE, score);
+ put(ORIGINAL_DOC_SCORE, score);
}
public Float getOriginalDocScore() {
- return (Float)get(DocInfo.ORIGINAL_DOC_SCORE);
+ return (Float)get(ORIGINAL_DOC_SCORE);
}
public boolean hasOriginalDocScore() {
- return containsKey(DocInfo.ORIGINAL_DOC_SCORE);
+ return containsKey(ORIGINAL_DOC_SCORE);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ce7a067d/solr/contrib/ltr/src/java/org/apache/solr/ltr/LTRScoringQuery.java
----------------------------------------------------------------------
diff --git a/solr/contrib/ltr/src/java/org/apache/solr/ltr/LTRScoringQuery.java b/solr/contrib/ltr/src/java/org/apache/solr/ltr/LTRScoringQuery.java
index 778e2be..991c1ed 100644
--- a/solr/contrib/ltr/src/java/org/apache/solr/ltr/LTRScoringQuery.java
+++ b/solr/contrib/ltr/src/java/org/apache/solr/ltr/LTRScoringQuery.java
@@ -63,14 +63,14 @@ public class LTRScoringQuery extends Query {
final private Semaphore querySemaphore; // limits the number of threads per query, so that multiple requests can be serviced simultaneously
// feature logger to output the features.
- protected FeatureLogger<?> fl;
+ private FeatureLogger<?> fl;
// Map of external parameters, such as query intent, that can be used by
// features
- protected final Map<String,String[]> efi;
+ final private Map<String,String[]> efi;
// Original solr query used to fetch matching documents
- protected Query originalQuery;
+ private Query originalQuery;
// Original solr request
- protected SolrQueryRequest request;
+ private SolrQueryRequest request;
public LTRScoringQuery(LTRScoringModel ltrScoringModel) {
this(ltrScoringModel, Collections.<String,String[]>emptyMap(), false, null);
@@ -225,7 +225,7 @@ public class LTRScoringQuery extends Query {
modelFeaturesWeights[j++] = fw;
}
}
- return new ModelWeight(searcher, modelFeaturesWeights, extractedFeatureWeights, allFeatures.size());
+ return new ModelWeight(modelFeaturesWeights, extractedFeatureWeights, allFeatures.size());
}
private void createWeights(IndexSearcher searcher, boolean needsScores, float boost,
@@ -243,11 +243,11 @@ public class LTRScoringQuery extends Query {
}
}
- class CreateWeightCallable implements Callable<Feature.FeatureWeight>{
+ private class CreateWeightCallable implements Callable<Feature.FeatureWeight>{
final private Feature f;
- IndexSearcher searcher;
- boolean needsScores;
- SolrQueryRequest req;
+ final private IndexSearcher searcher;
+ final private boolean needsScores;
+ final private SolrQueryRequest req;
public CreateWeightCallable(Feature f, IndexSearcher searcher, boolean needsScores, SolrQueryRequest req){
this.f = f;
@@ -301,16 +301,16 @@ public class LTRScoringQuery extends Query {
}
public class FeatureInfo {
- String name;
- float value;
- boolean used;
+ final private String name;
+ private float value;
+ private boolean used;
FeatureInfo(String n, float v, boolean u){
name = n; value = v; used = u;
}
- public void setScore(float score){
- this.value = score;
+ public void setValue(float value){
+ this.value = value;
}
public String getName(){
@@ -332,13 +332,11 @@ public class LTRScoringQuery extends Query {
public class ModelWeight extends Weight {
- IndexSearcher searcher;
-
// List of the model's features used for scoring. This is a subset of the
// features used for logging.
- Feature.FeatureWeight[] modelFeatureWeights;
- float[] modelFeatureValuesNormalized;
- Feature.FeatureWeight[] extractedFeatureWeights;
+ final private Feature.FeatureWeight[] modelFeatureWeights;
+ final private float[] modelFeatureValuesNormalized;
+ final private Feature.FeatureWeight[] extractedFeatureWeights;
// List of all the feature names, values - used for both scoring and logging
/*
@@ -351,7 +349,7 @@ public class LTRScoringQuery extends Query {
* we need a map which holds just the features that were triggered by the documents in the result set.
*
*/
- FeatureInfo[] featuresInfo;
+ final private FeatureInfo[] featuresInfo;
/*
* @param modelFeatureWeights
* - should be the same size as the number of features used by the model
@@ -362,10 +360,9 @@ public class LTRScoringQuery extends Query {
* @param allFeaturesSize
* - total number of feature in the feature store used by this model
*/
- public ModelWeight(IndexSearcher searcher, Feature.FeatureWeight[] modelFeatureWeights,
+ public ModelWeight(Feature.FeatureWeight[] modelFeatureWeights,
Feature.FeatureWeight[] extractedFeatureWeights, int allFeaturesSize) {
super(LTRScoringQuery.this);
- this.searcher = searcher;
this.extractedFeatureWeights = extractedFeatureWeights;
this.modelFeatureWeights = modelFeatureWeights;
this.modelFeatureValuesNormalized = new float[modelFeatureWeights.length];
@@ -386,6 +383,21 @@ public class LTRScoringQuery extends Query {
return featuresInfo;
}
+ // for test use
+ Feature.FeatureWeight[] getModelFeatureWeights() {
+ return modelFeatureWeights;
+ }
+
+ // for test use
+ float[] getModelFeatureValuesNormalized() {
+ return modelFeatureValuesNormalized;
+ }
+
+ // for test use
+ Feature.FeatureWeight[] getExtractedFeatureWeights() {
+ return extractedFeatureWeights;
+ }
+
/**
* Goes through all the stored feature values, and calculates the normalized
* values for all the features that will be used for scoring.
@@ -439,7 +451,7 @@ public class LTRScoringQuery extends Query {
for (int i = 0; i < extractedFeatureWeights.length;++i){
int featId = extractedFeatureWeights[i].getIndex();
float value = extractedFeatureWeights[i].getDefaultValue();
- featuresInfo[featId].setScore(value); // need to set default value everytime as the default value is used in 'dense' mode even if used=false
+ featuresInfo[featId].setValue(value); // need to set default value everytime as the default value is used in 'dense' mode even if used=false
featuresInfo[featId].setUsed(false);
}
}
@@ -452,7 +464,7 @@ public class LTRScoringQuery extends Query {
for (final Feature.FeatureWeight featureWeight : extractedFeatureWeights) {
final Feature.FeatureWeight.FeatureScorer scorer = featureWeight.scorer(context);
if (scorer != null) {
- featureScorers.add(featureWeight.scorer(context));
+ featureScorers.add(scorer);
}
}
// Always return a ModelScorer, even if no features match, because we
@@ -512,14 +524,14 @@ public class LTRScoringQuery extends Query {
return featureTraversalScorer.iterator();
}
- public class SparseModelScorer extends Scorer {
- protected DisiPriorityQueue subScorers;
- protected ScoringQuerySparseIterator itr;
+ private class SparseModelScorer extends Scorer {
+ final private DisiPriorityQueue subScorers;
+ final private ScoringQuerySparseIterator itr;
- protected int targetDoc = -1;
- protected int activeDoc = -1;
+ private int targetDoc = -1;
+ private int activeDoc = -1;
- protected SparseModelScorer(Weight weight,
+ private SparseModelScorer(Weight weight,
List<Feature.FeatureWeight.FeatureScorer> featureScorers) {
super(weight);
if (featureScorers.size() <= 1) {
@@ -554,7 +566,7 @@ public class LTRScoringQuery extends Query {
final Scorer subScorer = w.scorer;
Feature.FeatureWeight scFW = (Feature.FeatureWeight) subScorer.getWeight();
final int featureId = scFW.getIndex();
- featuresInfo[featureId].setScore(subScorer.score());
+ featuresInfo[featureId].setValue(subScorer.score());
featuresInfo[featureId].setUsed(true);
}
}
@@ -586,8 +598,7 @@ public class LTRScoringQuery extends Query {
return children;
}
- protected class ScoringQuerySparseIterator extends
- DisjunctionDISIApproximation {
+ private class ScoringQuerySparseIterator extends DisjunctionDISIApproximation {
public ScoringQuerySparseIterator(DisiPriorityQueue subIterators) {
super(subIterators);
@@ -620,13 +631,13 @@ public class LTRScoringQuery extends Query {
}
- public class DenseModelScorer extends Scorer {
- int activeDoc = -1; // The doc that our scorer's are actually at
- int targetDoc = -1; // The doc we were most recently told to go to
- int freq = -1;
- List<Feature.FeatureWeight.FeatureScorer> featureScorers;
+ private class DenseModelScorer extends Scorer {
+ private int activeDoc = -1; // The doc that our scorer's are actually at
+ private int targetDoc = -1; // The doc we were most recently told to go to
+ private int freq = -1;
+ final private List<Feature.FeatureWeight.FeatureScorer> featureScorers;
- protected DenseModelScorer(Weight weight,
+ private DenseModelScorer(Weight weight,
List<Feature.FeatureWeight.FeatureScorer> featureScorers) {
super(weight);
this.featureScorers = featureScorers;
@@ -647,7 +658,7 @@ public class LTRScoringQuery extends Query {
freq++;
Feature.FeatureWeight scFW = (Feature.FeatureWeight) scorer.getWeight();
final int featureId = scFW.getIndex();
- featuresInfo[featureId].setScore(scorer.score());
+ featuresInfo[featureId].setValue(scorer.score());
featuresInfo[featureId].setUsed(true);
}
}
@@ -675,7 +686,7 @@ public class LTRScoringQuery extends Query {
return new DenseIterator();
}
- class DenseIterator extends DocIdSetIterator {
+ private class DenseIterator extends DocIdSetIterator {
@Override
public int docID() {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ce7a067d/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestLTRScoringQuery.java
----------------------------------------------------------------------
diff --git a/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestLTRScoringQuery.java b/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestLTRScoringQuery.java
index 19c48bd..bf241b7 100644
--- a/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestLTRScoringQuery.java
+++ b/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestLTRScoringQuery.java
@@ -225,14 +225,14 @@ public class TestLTRScoringQuery extends LuceneTestCase {
LTRScoringQuery.ModelWeight modelWeight = performQuery(hits, searcher,
hits.scoreDocs[0].doc, new LTRScoringQuery(ltrScoringModel));
- assertEquals(3, modelWeight.modelFeatureValuesNormalized.length);
+ assertEquals(3, modelWeight.getModelFeatureValuesNormalized().length);
for (int i = 0; i < 3; i++) {
- assertEquals(i, modelWeight.modelFeatureValuesNormalized[i], 0.0001);
+ assertEquals(i, modelWeight.getModelFeatureValuesNormalized()[i], 0.0001);
}
int[] posVals = new int[] {0, 1, 2};
int pos = 0;
- for (LTRScoringQuery.FeatureInfo fInfo:modelWeight.featuresInfo) {
+ for (LTRScoringQuery.FeatureInfo fInfo:modelWeight.getFeaturesInfo()) {
if (fInfo == null){
continue;
}
@@ -252,11 +252,11 @@ public class TestLTRScoringQuery extends LuceneTestCase {
modelWeight = performQuery(hits, searcher, hits.scoreDocs[0].doc,
new LTRScoringQuery(ltrScoringModel));
assertEquals(mixPositions.length,
- modelWeight.modelFeatureWeights.length);
+ modelWeight.getModelFeatureWeights().length);
for (int i = 0; i < mixPositions.length; i++) {
assertEquals(mixPositions[i],
- modelWeight.modelFeatureValuesNormalized[i], 0.0001);
+ modelWeight.getModelFeatureValuesNormalized()[i], 0.0001);
}
final ModelException expectedModelException = new ModelException("no features declared for model test");
@@ -271,7 +271,7 @@ public class TestLTRScoringQuery extends LuceneTestCase {
fail("unexpectedly got here instead of catching "+expectedModelException);
modelWeight = performQuery(hits, searcher, hits.scoreDocs[0].doc,
new LTRScoringQuery(ltrScoringModel));
- assertEquals(0, modelWeight.modelFeatureWeights.length);
+ assertEquals(0, modelWeight.getModelFeatureWeights().length);
} catch (ModelException actualModelException) {
assertEquals(expectedModelException.toString(), actualModelException.toString());
}
@@ -299,11 +299,11 @@ public class TestLTRScoringQuery extends LuceneTestCase {
modelWeight = performQuery(hits, searcher, hits.scoreDocs[0].doc,
new LTRScoringQuery(normMeta));
- normMeta.normalizeFeaturesInPlace(modelWeight.modelFeatureValuesNormalized);
+ normMeta.normalizeFeaturesInPlace(modelWeight.getModelFeatureValuesNormalized());
assertEquals(mixPositions.length,
- modelWeight.modelFeatureWeights.length);
+ modelWeight.getModelFeatureWeights().length);
for (int i = 0; i < mixPositions.length; i++) {
- assertEquals(42.42f, modelWeight.modelFeatureValuesNormalized[i], 0.0001);
+ assertEquals(42.42f, modelWeight.getModelFeatureValuesNormalized()[i], 0.0001);
}
r.close();
dir.close();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ce7a067d/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestSelectiveWeightCreation.java
----------------------------------------------------------------------
diff --git a/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestSelectiveWeightCreation.java b/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestSelectiveWeightCreation.java
index db9fbe1..68961d2 100644
--- a/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestSelectiveWeightCreation.java
+++ b/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestSelectiveWeightCreation.java
@@ -176,11 +176,12 @@ public class TestSelectiveWeightCreation extends TestRerankBase {
makeFeatureWeights(features));
LTRScoringQuery.ModelWeight modelWeight = performQuery(hits, searcher,
hits.scoreDocs[0].doc, new LTRScoringQuery(ltrScoringModel1, false)); // features not requested in response
+ LTRScoringQuery.FeatureInfo[] featuresInfo = modelWeight.getFeaturesInfo();
- assertEquals(features.size(), modelWeight.modelFeatureValuesNormalized.length);
+ assertEquals(features.size(), modelWeight.getModelFeatureValuesNormalized().length);
int validFeatures = 0;
- for (int i=0; i < modelWeight.featuresInfo.length; ++i){
- if (modelWeight.featuresInfo[i] != null && modelWeight.featuresInfo[i].isUsed()){
+ for (int i=0; i < featuresInfo.length; ++i){
+ if (featuresInfo[i] != null && featuresInfo[i].isUsed()){
validFeatures += 1;
}
}
@@ -192,13 +193,14 @@ public class TestSelectiveWeightCreation extends TestRerankBase {
makeFeatureWeights(features));
modelWeight = performQuery(hits, searcher,
hits.scoreDocs[0].doc, new LTRScoringQuery(ltrScoringModel2, true)); // features requested in response
+ featuresInfo = modelWeight.getFeaturesInfo();
- assertEquals(features.size(), modelWeight.modelFeatureValuesNormalized.length);
- assertEquals(allFeatures.size(), modelWeight.extractedFeatureWeights.length);
+ assertEquals(features.size(), modelWeight.getModelFeatureValuesNormalized().length);
+ assertEquals(allFeatures.size(), modelWeight.getExtractedFeatureWeights().length);
validFeatures = 0;
- for (int i=0; i < modelWeight.featuresInfo.length; ++i){
- if (modelWeight.featuresInfo[i] != null && modelWeight.featuresInfo[i].isUsed()){
+ for (int i=0; i < featuresInfo.length; ++i){
+ if (featuresInfo[i] != null && featuresInfo[i].isUsed()){
validFeatures += 1;
}
}