Before starting, I suggest you start playing with the Microsoft Graph Explorer, especially with the "search driveitems" query:

You also might need an Azure Active Directory admin to create an application with the appropriate Graph API permissions. If not, in Power Automate, try the "HTTP with Azure AD" connector and the "Invoke an HTTP request" action (with "https://graph.microsoft.com" for both fields, the base resource URL and the resource URI).
OK, to get my bot to search documents for me, I start on the Power Virtual Agents side:
- I create a new topic, called "Document Search", and I define trigger phrases for it.
- I then ask the question "I understand you're looking for documents. Please provide me with a few keywords to help with the search."
- I capture the "User's entire response" as a "Keywords" variable.
- Then I add a new node and select "Call an action" and choose "Create a flow".

In Power Automate:
- I add as a text input "Keywords"
- I initiatize a string variable, called "ResultSet"
- I initialize a string variable called "SiteId", and give it the value of my SharePoint siteId (you can get the right siteId from the Microsoft Graph Explorer, using the "search driveitems" query).
- I initialize an integer variable, called "NumberOfResults"

I give my cloud flow a name, and I save.
In this example, I'll run the queries against the Graph API with an application (if you don't/can't have one, try the HTTP with Azure AD instead of HTTP pproach in Power Automate, as recommended in the introduction
In Azure Active Directory:
- Go to "App registrations"
- Click on "New registration"
- Give it a name and click on "Register"
- Copy the "Application (client) ID" and the "Directory (tenant) ID" somewhere for later.
- Go to "Certificates and secrets"
- Create a "New client secret"
- Copy the secret value (not the Secret ID!) somewhere, for later
- In "API Permissions", select "Add a Permission"
- Choose "Microsoft Graph", then "Application permissions", and select "Files.Read.All", and "Sites.Read.All".
- You can then "Grant admin consent" (this requires admin permissions)

Back in Power Automate:
- Add an "HTTP" action from the "HTTP" connector"
- Method: "POST"
- URI: "https://graph.microsoft.com/v1.0/search/query"
- Hearders, "Content-Type" "application/json"
- In Body:
{
"requests": [
{
"entityTypes": [
"driveItem"
],
"query": {
"queryString": "@{triggerBody()['text']}"
},
"region": "US"
}
]
}EDIT: in a below comment I also show how to filter by file type or SharePoint path to limit results.
Don't forget to add and adjust the region, as you will get this error otherwise, when trying to call the Graph API from an application:
SearchRequest Invalid (Region is required when request with application permission.)
Region is required when request with application permission.
You need to show the advanced option to then set authentication:
- Authentication: "Azure Directory OAuth".
- Tenant: the "Directory (tenant) ID" you copied from the application.
- Audience: "https://graph.microsoft.com".
- Client ID: the "Application (client) ID" you copied from the application.
- Credential Type: "Secret".
- Secret: the secret value (not the Secret ID!) you copied from the application.

Again, if you want to use your user account, you can use a similar query done with the "HTTP with Azure AD" connector and the "Invoke an HTTP request" action.
The next step is to parse the JSON answer.
You can generate the Schema from a sample, or paste the below:
{
"type": "object",
"properties": {
"value": {
"type": "array",
"items": {
"type": "object",
"properties": {
"searchTerms": {
"type": "array",
"items": {
"type": "string"
}
},
"hitsContainers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"hits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"hitId": {
"type": "string"
},
"rank": {
"type": "integer"
},
"summary": {
"type": "string"
},
"resource": {
"type": "object",
"properties": {
"@@odata.type": {
"type": "string"
},
"size": {
"type": "integer"
},
"fileSystemInfo": {
"type": "object",
"properties": {
"createdDateTime": {
"type": "string"
},
"lastModifiedDateTime": {
"type": "string"
}
}
},
"id": {
"type": "string"
},
"createdBy": {
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"displayName": {
"type": "string"
},
"email": {
"type": "string"
}
}
}
}
},
"createdDateTime": {
"type": "string"
},
"lastModifiedBy": {
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"displayName": {
"type": "string"
},
"email": {
"type": "string"
}
}
}
}
},
"lastModifiedDateTime": {
"type": "string"
},
"name": {
"type": "string"
},
"parentReference": {
"type": "object",
"properties": {
"driveId": {
"type": "string"
},
"id": {
"type": "string"
},
"sharepointIds": {
"type": "object",
"properties": {
"listId": {
"type": "string"
},
"listItemId": {
"type": "string"
},
"listItemUniqueId": {
"type": "string"
}
}
},
"siteId": {
"type": "string"
}
}
},
"webUrl": {
"type": "string"
}
}
}
}
}
},
"total": {
"type": "integer"
},
"moreResultsAvailable": {
"type": "boolean"
}
}
}
}
}
}
},
"@@odata.context": {
"type": "string"
}
}
}

Next, we add an "Apply to each" action, so that we can append our "ResultSet" variable with each matching document. We have to go a few levels done here.
We also use an "Increment variable" action, to count the number of results we'll send back to PVA.
We also add a "Condition" node, because we want to only return results to the user for a specific SharePoint site.
EDIT: in a below comment I also show how to filter by file type or SharePoint path to limit results at the Graph API query level. A much more elegant solution than the condition in Power Automate.

On the "Append to string variable" action, you can see I use an expression.
This is to make sure the URL doesn't get messed up as spaces and such are not encoded from the Graph API results.
replace(items('Apply_to_each:_hitContainer')?['resource']?['webUrl'], ' ', '%20')The last step is to return values to Power Virtual Agents.
Here I send back 2 variables:
- SearchResults: with the "ResultSet" variable
- NumberOfResults, with the "NumberOfResults" variable

I save the Power Automate cloud flow.
Back in PVA:
- I add the "Call an action" node and select my new flow.
- I map the appropriate variables to pass the keywords.
- After the flow, I add a "Send a message" node
- I use the cloud flow outputs to send the results to the user.

Voilà