Hi all,

playing with the solr scale function I found a few corner cases where I
need to scale only the results set.

I found a workaround that works but it does not seem to be viable, because
if I add an fq parameter the scale function still continues to work only on
the q param .

For example with q=popularity:(1 OR 7):

http://localhost:8983/solr/techproducts/select?q=popularity:(1 OR
7)&rows=100&fl=price,scale(sum(price,query($q)), 0, 1)

{
  "responseHeader":{
    "status":0,
    "QTime":1,
    "params":{
      "q":"popularity:(1 OR 7)",
      "fl":"price,scale(sum(price,query($q)), 0, 1)",
      "rows":"100"}},
  "response":{"numFound":6,"start":0,"numFoundExact":true,"docs":[
      {
        "price":74.99,
        "scale(sum(price,query($q)), 0, 1)":0.099437736},
      {
        "price":19.95,
        "scale(sum(price,query($q)), 0, 1)":0.013234352},
      {
        "price":11.5,
        "scale(sum(price,query($q)), 0, 1)":0.0},
      {
        "price":329.95,
        "scale(sum(price,query($q)), 0, 1)":0.49875492},
      {
        "price":479.95,
        "scale(sum(price,query($q)), 0, 1)":0.7336842},
      {
        "price":649.99,
        "scale(sum(price,query($q)), 0, 1)":1.0}]
  }}

but moving the filter in fq:

http://localhost:8983/solr/techproducts/select?q=*:*&fq=popularity:(1%20OR%207)&rows=100&fl=price,scale(sum(price,query($q)),%200,%201)

{
  "responseHeader":{
    "status":0,
    "QTime":8,
    "params":{
      "q":"*:*",
      "fl":"price,scale(sum(price,query($q)), 0, 1)",
      "fq":"popularity:(1 OR 7)",
      "rows":"100"}},
  "response":{"numFound":6,"start":0,"numFoundExact":true,"docs":[
      {
        "price":74.99,
        "scale(sum(price,query($q)), 0, 1)":0.034101862},
      {
        "price":19.95,
        "scale(sum(price,query($q)), 0, 1)":0.009072306},
      {
        "price":11.5,
        "scale(sum(price,query($q)), 0, 1)":0.0052296496},
      {
        "price":329.95,
        "scale(sum(price,query($q)), 0, 1)":0.15004548},
      {
        "price":479.95,
        "scale(sum(price,query($q)), 0, 1)":0.2182583},
      {
        "price":649.99,
        "scale(sum(price,query($q)), 0, 1)":0.29558435}]
  }}


On the other hand, I was thinking of implementing a custom scale function
that by default works only on the current result set and not on the entire
collection.

Any suggestions on how to solve this problem?

Best regards,
Vincenzo


-- 
Vincenzo D'Amore

Reply via email to