### 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
MappedFieldType fieldType = context.getFieldType(fieldName);
        if (fieldType == null) {
            throw new ParsingException(parser.getTokenLocation(), "unknown field [{}]", fieldName);
        }
        
        parser.nextToken();
        
        if (fieldType instanceof DateFieldMapper.DateFieldType) {
            return parseDateVariable(parser, context, fieldType, mode);
        } else if (fieldType instanceof GeoPointFieldType) {
            return parseGeoVariable(parser, context, fieldType, mode);
        } else if (fieldType instanceof NumberFieldMapper.NumberFieldType) {
            return parseNumberVariable(parser, context, fieldType, mode);
        } else {
            throw new ParsingException(
                parser.getTokenLocation(),
                "field [{}] is of type [{}], but only numeric types are supported.",
                fieldName,
                fieldType
            );
        }
    }
    private AbstractDistanceScoreFunction parseNumberVariable(
        XContentParser parser,
        SearchExecutionContext context,
        MappedFieldType fieldType,
        MultiValueMode mode
    ) throws IOException {
        XContentParser.Token token;
        String parameterName = null;