> For the complete documentation index, see [llms.txt](https://docs.hyper-space.io/hyperspace-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hyper-space.io/hyperspace-docs/api-documentation/dsl-query-framework/scoring-and-ranking/function-score.md).

# Function Score

## Function Score

The `function_score` query allows you to modify the relevance score of documents returned by a query. It's particularly useful when you want to introduce custom scoring logic, boost certain documents, or apply mathematical functions to influence the relevance of search results. The `function_score` query wraps around an existing query (e.g., a `match` query) and modifies the scores produced by that query.\
Scoring functions are defined within the `functions` array. Each function applies a specific logic to modify the relevance score of documents.  Common types of functions include:

* `weight`: Assigns a static weight to the documents.
* `field_value_factor`: Scales scores based on the values of a numeric field.
* `script_score`: Allows you to define custom scoring logic using a script.
* `random_score`: Introduces randomness to the scores.

### **Combining Functions:**

Multiple scoring functions can be defined within the `functions` array. The results of these functions are combined to produce the final relevance score. You can control how the scores are combined using parameters like `score_mode` and `boost_mode`.

### **Boost Mode:**

The `boost_mode` parameter specifies how the scores from different functions are combined. Common options include:

* `multiply`: Multiply the scores from different functions.
* `sum`: Add the scores from different functions.
* `replace`: Use the score of the first function that produces a non-zero score.

### **Score Mode:**

The `score_mode` parameter determines how the scores of individual functions are combined. Common options include:

* `multiply`: Multiply the scores.
* `sum`: Add the scores.
* `avg`: Calculate the average of the scores.

{% code lineNumbers="true" %}

```json
{
  "query": {
    "function_score": {
      "query": {
        "match": { "field": "value" }
      },
      "functions": [
        {
          "weight": 2
        },
        {
          "field_value_factor": {
            "field": "numeric_field",
            "factor": 1.5,
            "modifier": "sqrt"
          }
        }
      ],
      "score_mode": "sum",
      "boost_mode": "multiply"
    }
  }
}
```

{% endcode %}

In the above example, the `function_score` query is applied to a `match` query. It includes two functions: one that assigns a static weight of 2, and another that scales the scores based on the square root of a numeric field.

* The first function (weight) multiplies the score by 2.0 (weight \* base score).
* The second function (field\_value\_factor) uses the square root of the numeric field.
* The final score for this document would be the sum of these scores (basis\_score + first function+ second function)
