### Elasticsearch Version

8.4

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

any

### Problem Description

unsigned_long field type doesn't work with function_score decay functions, and produces an error:

```
"type" : "parsing_exception",
"reason" : "field [unsigned_long_test] is of type [org.elasticsearch.xpack.unsignedlong.UnsignedLongFieldMapper$UnsignedLongFieldType@10281e68], but only numeric types are supported."
```



### Steps to Reproduce


**1. Create index**
```
PUT numeric-test-mapping
{
  "mappings": {
    "properties": {
      "double_test": {
        "type": "double"
      },
      "unsigned_long_test": {
        "type": "unsigned_long"
      },
      "long_test": {
        "type": "long"
      }
    }
  }
}
```

**2. Create documents with numeric values for the 3 different fields**
```
POST numeric-test-mapping/_doc/
{
  "double_test": 10, 
  "unsigned_long_test": 10,
  "long_test": 10
}
POST numeric-test-mapping/_doc/
{
  "double_test": 11, 
  "unsigned_long_test": 11,
  "long_test": 11
}

POST numeric-test-mapping/_doc/
{
  "double_test": 12, 
  "unsigned_long_test": 12,
  "long_test": 12
}
```

**3. Run search on index created**
```
GET numeric-test-mapping/_search 
{
  "from": 0,
  "size": 10,
  "query": {
    "function_score": {
    "functions": [
        {
            "gauss":{
                "unsigned_long_test":{
                  "scale": 1,
                  "origin": 0
                }
            }
        }]
    }
  }
}
```

### Logs (if relevant)

_No response_
server/src/main/java/org/elasticsearch/index/query/functionscore/DecayFunctionBuilder.java
&& Objects.equals(this.multiValueMode, functionBuilder.getMultiValueMode());
    }
    @Override
    protected int doHashCode() {
        return Objects.hash(this.fieldName, this.functionBytes, this.multiValueMode);
    }
    @Override
    protected ScoreFunction doToFunction(SearchExecutionContext context) throws IOException {
        AbstractDistanceScoreFunction scoreFunction;
        
        try (
            InputStream stream = functionBytes.streamInput();
            XContentParser parser = XContentFactory.xContent(XContentHelper.xContentType(functionBytes))
                .createParser(NamedXContentRegistry.EMPTY, LoggingDeprecationHandler.INSTANCE, stream)
        ) {
            scoreFunction = parseVariable(fieldName, parser, context, multiValueMode);
        }
        return scoreFunction;
    }
    /**
     * Override this function if you want to produce your own scorer.
     * */
    protected abstract DecayFunction getDecayFunction();
    private AbstractDistanceScoreFunction parseVariable(
        String fieldName,
        XContentParser parser,
        SearchExecutionContext context,
        MultiValueMode mode
    ) throws IOException {