solr - Scaling a field value within the result set -


i using scale function in order normalize values of field between 1 , 3. problem values not normalized relative result set, indexed documents.

for example:

/select?q=id:173540413&fl=id,scale(id, 1, 2)  id,"scale(id, 1, 2)" 173540413,1.9903924  /select?q=id:(173540413 173540377)&fl=id,scale(id, 1, 2)  id,"scale(id, 1, 2)" 173540413,1.9903924 173540377,1.9903922 

the desired result be:

/select?q=id:173540413&fl=id,scale(id, 1, 2)  id,"scale(id, 1, 2)" 173540413,1  /select?q=id:(173540413 173540377)&fl=id,scale(id, 1, 2)  id,"scale(id, 1, 2)" 173540413,2 173540377,1 

is there other way scale results, perhaps without using scale?

there roundabout way achieve in solr.

solr's scaling function behaves differently when used against field query dependent vs when used against field not.

so when trying scale field 'id' not query dependent, solr considers entire document set scale. alter min , max taken entire doc-set instead of query result set. whereas, when scale query dependent value query($q) (which tf-idf text similarity score document against searchterm), solr considers search result set min , max scaling.

now, want second option. so, this:

q=searchterm&fl=id,scale(sub(sum(id,query($q)),query($q)), 1, 2)

this we're doing field: id + query($q) - query($q)

this tricks solr thinking query dependent field, when in fact evaluates same 'id' field. give smooth [1,2] range based scaling intended.

apart scale(), believe approach work other function queries max() , min() operate on entire document set instead of query result set.


Comments