I have a couple of questions regarding function scores. I probably already
know the answers, but just wanted to double-check with the community. I am
still on version 1.1.1, so perhaps things have changed since then.

First question is regarding ordering and efficiency. Currently, my query is
a standard filtered query with a function score surrounding the inner most
query:

POST /_search
{
   "query": {
      "filtered": {
         "query": {
            "function_score": {
               "query": {
                  ...
               },
               "script_score": {
                  "script": "..."
               },
               "boost_mode": "multiply"
            }
         },
         "filter": {
            ...
         }
      }
   }
}

While attempting to fine-tune further my queries, I was wondering if it
made sense to move the function_score higher up the chain:

POST /_search
{
   "query": {
      "function_score": {
         "query": {
            "filtered": {
               "query": {
                  ...
               },
               "filter": {
                  ...
               }
            }
         },
         "script_score": {
            "script": "..."
         },
         "boost_mode": "multiply"
      }
   }
}

Both work as intended. I would suspect that the efficiency is the same
since the function is still scoring the same pre-filtered documents. Not
sure how this change would affect caching, if at all.

Next question is regarding applying different function_scores. Beside using
the script_score, I know also want to use boost functions. Using version
1.1.1, I cannot apply both script_scores and functions:

POST /_search
{
   "query": {
      "function_score": {
         "query": {
            "filtered": {
               "query": {
                  ...
               },
               "filter": {
                  ...
               }
            }
         },
         "script_score": {
            "script": "..."
         },
         "functions": [
            {
               "filter": {
                  ...
               },
               "boost_factor": 1
            }
         ]
         "boost_mode": "multiply"
      }
   }
}

Chaining the function scores does work. The original script_score function
is now wrapped by the boost functions.

POST /_search
{
   "query": {
      "function_score": {
         "query": {
            "function_score": {
               "query": {
                  "filtered": {
                     "query": {
                        ...
                     },
                     "filter": {
                        ...
                     }
                  }
               },
               "script_score": {
                  "script": "..."
               },
               "boost_mode": "multiply"
            }
         },
         "functions": [
            {
               "filter": {
                  ...
               },
               "boost_factor": 1
            }
         ]
      }
   }
}

Should I have been able to use both types of scripts at the same time? I
also do not think there will be any difference in the ordering, but did I
perhaps overlook something?

Cheers,

Ivan

-- 
You received this message because you are subscribed to the Google Groups 
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elasticsearch+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/CALY%3DcQBpX9Ux4AVaBcAVZc3b3cmusR7vKuG85%2BBKwr8yXqwK4w%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to