mirror of https://github.com/apache/lucene.git
SOLR-11254: Add score-less (abstract) DocTransformer.transform method.
This commit is contained in:
parent
6b8f98db93
commit
40fc36b87e
|
@ -57,6 +57,8 @@ Upgrade Notes
|
|||
If a reporter configures the group="cluster" attribute then please also configure the
|
||||
class="org.apache.solr.metrics.reporters.solr.SolrClusterReporter" attribute.
|
||||
|
||||
* SOLR-11254: the abstract DocTransformer class now has an abstract score-less transform method variant.
|
||||
|
||||
New Features
|
||||
----------------------
|
||||
|
||||
|
@ -158,6 +160,8 @@ Other Changes
|
|||
|
||||
* SOLR-11240: Raise UnInvertedField internal limit. (Toke Eskildsen)
|
||||
|
||||
* SOLR-11254: Add score-less (abstract) DocTransformer.transform method. (Christine Poerschke)
|
||||
|
||||
================== 7.0.0 ==================
|
||||
|
||||
Versions of Major Components
|
||||
|
|
|
@ -255,13 +255,24 @@ public class LTRFeatureLoggerTransformerFactory extends TransformerFactory {
|
|||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score)
|
||||
throws IOException {
|
||||
implTransform(doc, docid, new Float(score));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid)
|
||||
throws IOException {
|
||||
implTransform(doc, docid, 0.0f);
|
||||
}
|
||||
|
||||
private void implTransform(SolrDocument doc, int docid, Float score)
|
||||
throws IOException {
|
||||
Object fv = featureLogger.getFeatureVector(docid, scoringQuery, searcher);
|
||||
if (fv == null) { // FV for this document was not in the cache
|
||||
fv = featureLogger.makeFeatureVector(
|
||||
LTRRescorer.extractFeaturesInfo(
|
||||
modelWeight,
|
||||
docid,
|
||||
(docsWereNotReranked ? new Float(score) : null),
|
||||
(docsWereNotReranked ? score : null),
|
||||
leafContexts));
|
||||
}
|
||||
|
||||
|
|
|
@ -265,7 +265,7 @@ public class RealTimeGetComponent extends SearchComponent
|
|||
throw new SolrException(ErrorCode.INVALID_STATE, "Expected ADD or UPDATE_INPLACE. Got: " + oper);
|
||||
}
|
||||
if (transformer!=null) {
|
||||
transformer.transform(doc, -1, 0); // unknown docID
|
||||
transformer.transform(doc, -1); // unknown docID
|
||||
}
|
||||
docList.add(doc);
|
||||
break;
|
||||
|
@ -314,7 +314,7 @@ public class RealTimeGetComponent extends SearchComponent
|
|||
resultContext = new RTGResultContext(rsp.getReturnFields(), searcherInfo.getSearcher(), req);
|
||||
transformer.setContext(resultContext);
|
||||
}
|
||||
transformer.transform(doc, docid, 0);
|
||||
transformer.transform(doc, docid);
|
||||
}
|
||||
docList.add(doc);
|
||||
}
|
||||
|
|
|
@ -167,7 +167,11 @@ public class DocsStreamer implements Iterator<SolrDocument> {
|
|||
if (transformer != null) {
|
||||
boolean doScore = rctx.wantsScores();
|
||||
try {
|
||||
transformer.transform(sdoc, id, doScore ? docIterator.score() : 0);
|
||||
if (doScore) {
|
||||
transformer.transform(sdoc, id, docIterator.score());
|
||||
} else {
|
||||
transformer.transform(sdoc, id);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Error applying transformer", e);
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ public abstract class BaseEditorialTransformer extends DocTransformer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score) {
|
||||
public void transform(SolrDocument doc, int docid) {
|
||||
//this only gets added if QueryElevationParams.MARK_EXCLUDED is true
|
||||
Set<String> ids = getIdSet();
|
||||
if (ids != null && ids.isEmpty() == false) {
|
||||
|
|
|
@ -123,7 +123,7 @@ class ChildDocTransformer extends DocTransformer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score) {
|
||||
public void transform(SolrDocument doc, int docid) {
|
||||
|
||||
FieldType idFt = idField.getType();
|
||||
Object parentIdField = doc.getFirstValue(idField.getName());
|
||||
|
|
|
@ -51,7 +51,7 @@ class DocIdAugmenter extends DocTransformer
|
|||
}
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score) {
|
||||
public void transform(SolrDocument doc, int docid) {
|
||||
assert -1 <= docid;
|
||||
doc.setField( name, docid );
|
||||
}
|
||||
|
|
|
@ -73,13 +73,29 @@ public abstract class DocTransformer {
|
|||
* If implementations require a valid docId and index access, the {@link #needsSolrIndexSearcher}
|
||||
* method must return true
|
||||
*
|
||||
* Default implementation calls {@link #transform(SolrDocument, int)}.
|
||||
*
|
||||
* @param doc The document to alter
|
||||
* @param docid The Lucene internal doc id, or -1 in cases where the <code>doc</code> did not come from the index
|
||||
* @param score the score for this document
|
||||
* @throws IOException If there is a low-level I/O error.
|
||||
* @see #needsSolrIndexSearcher
|
||||
*/
|
||||
public abstract void transform(SolrDocument doc, int docid, float score) throws IOException;
|
||||
public void transform(SolrDocument doc, int docid, float score) throws IOException {
|
||||
transform(doc, docid);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is where implementations do the actual work.
|
||||
* If implementations require a valid docId and index access, the {@link #needsSolrIndexSearcher}
|
||||
* method must return true
|
||||
*
|
||||
* @param doc The document to alter
|
||||
* @param docid The Lucene internal doc id, or -1 in cases where the <code>doc</code> did not come from the index
|
||||
* @throws IOException If there is a low-level I/O error.
|
||||
* @see #needsSolrIndexSearcher
|
||||
*/
|
||||
public abstract void transform(SolrDocument doc, int docid) throws IOException;
|
||||
|
||||
/**
|
||||
* When a transformer needs access to fields that are not automatically derived from the
|
||||
|
|
|
@ -77,6 +77,13 @@ public class DocTransformers extends DocTransformer
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid) throws IOException {
|
||||
for( DocTransformer a : children ) {
|
||||
a.transform( doc, docid);
|
||||
}
|
||||
}
|
||||
|
||||
/** Returns true if and only if at least 1 child transformer returns true */
|
||||
@Override
|
||||
public boolean needsSolrIndexSearcher() {
|
||||
|
|
|
@ -107,7 +107,7 @@ public class ExplainAugmenterFactory extends TransformerFactory
|
|||
}
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score) {
|
||||
public void transform(SolrDocument doc, int docid) {
|
||||
if( context != null && context.getQuery() != null ) {
|
||||
try {
|
||||
Explanation exp = context.getSearcher().explain(context.getQuery(), docid);
|
||||
|
|
|
@ -131,7 +131,7 @@ public class GeoTransformerFactory extends TransformerFactory
|
|||
}
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score) throws IOException {
|
||||
public void transform(SolrDocument doc, int docid) throws IOException {
|
||||
int leafOrd = ReaderUtil.subIndex(docid, context.getSearcher().getTopReaderContext().leaves());
|
||||
LeafReaderContext ctx = context.getSearcher().getTopReaderContext().leaves().get(leafOrd);
|
||||
ShapeValues values = shapes.getValues(ctx);
|
||||
|
@ -148,7 +148,7 @@ public class GeoTransformerFactory extends TransformerFactory
|
|||
return new DocTransformer() {
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score) throws IOException {
|
||||
public void transform(SolrDocument doc, int docid) throws IOException {
|
||||
Object val = doc.remove(updater.field);
|
||||
if(val!=null) {
|
||||
updater.setValue(doc, val);
|
||||
|
|
|
@ -107,7 +107,7 @@ public class RawValueTransformerFactory extends TransformerFactory
|
|||
}
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score) {
|
||||
public void transform(SolrDocument doc, int docid) {
|
||||
Object val = doc.remove(field);
|
||||
if(val==null) {
|
||||
return;
|
||||
|
|
|
@ -44,7 +44,7 @@ public class RenameFieldTransformer extends DocTransformer
|
|||
}
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score) {
|
||||
public void transform(SolrDocument doc, int docid) {
|
||||
Object v = (copy)?doc.get(from) : doc.remove( from );
|
||||
if( v != null ) {
|
||||
doc.setField(to, v);
|
||||
|
|
|
@ -44,4 +44,9 @@ public class ScoreAugmenter extends DocTransformer {
|
|||
doc.setField( name, score );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid) {
|
||||
transform(doc, docid, 0.0f);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -321,7 +321,7 @@ class SubQueryAugmenter extends DocTransformer {
|
|||
public boolean needsSolrIndexSearcher() { return false; }
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score) {
|
||||
public void transform(SolrDocument doc, int docid) {
|
||||
|
||||
final SolrParams docWithDeprefixed = SolrParams.wrapDefaults(
|
||||
new DocRowParams(doc, prefix, separator), baseSubParams);
|
||||
|
|
|
@ -96,7 +96,7 @@ class ValueAugmenter extends DocTransformer
|
|||
}
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score) {
|
||||
public void transform(SolrDocument doc, int docid) {
|
||||
doc.setField( name, value );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ public class ValueSourceAugmenter extends DocTransformer
|
|||
List<LeafReaderContext> readerContexts;
|
||||
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score) {
|
||||
public void transform(SolrDocument doc, int docid) {
|
||||
// This is only good for random-access functions
|
||||
|
||||
try {
|
||||
|
|
|
@ -105,7 +105,7 @@ public class TestCustomDocTransformer extends SolrTestCaseJ4 {
|
|||
* This transformer simply concatenates the values of multiple fields
|
||||
*/
|
||||
@Override
|
||||
public void transform(SolrDocument doc, int docid, float score) throws IOException {
|
||||
public void transform(SolrDocument doc, int docid) throws IOException {
|
||||
str.setLength(0);
|
||||
for(String s : extra) {
|
||||
String v = getAsString(s, doc);
|
||||
|
|
Loading…
Reference in New Issue