Issue:
Bug: [GlobalSearch] - BE - escape reserved characters in global search query



escape these reserved character which will break the search query
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_reserved_characters

currently when you pass the reserved characters in global search, the query_string break and it throwing something went wrong

```
curl --location 'https://sandbox.hyperswitch.io/analytics/v1/search' \
--header 'api-key: hyperswitch' \
--header 'authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZjQ0NjQyMjktNGI1OC00ODY5LThjODQtYWYxZTcwZWViMGRiIiwibWVyY2hhbnRfaWQiOiJqdXNwYXk3NTMiLCJyb2xlX2lkIjoibWVyY2hhbnRfYWRtaW4iLCJleHAiOjE3MTEwMjgwOTIsIm9yZ19pZCI6Im9yZ19YNXo3aGtSYzdmb2lpSU1lY3BudDIifQ.5mgjfo6--qkSKwqqrQgp0EenvCJQaGLm4SyDyOnu7NY' \     
--header 'content-type: application/json' \                                                                                                                                                
--data '{                                                     
    "query": "Unexpected communication error with connector/acquirer"    
}'
```
```json
{"error":{"type":"api","message":"Something went wrong","code":"HE_00"}}
```

hence moving the opensearch query to filter field under multi_match phrase which should ignore these reserved characters.

```
curl --location --request POST 'http://localhost:8080/analytics/v1/search/payment_attempts' \
--header 'api-key: hyperswitch' \
--header 'authorization: Bearer *' \
--header 'content-type: application/json' \
--data-raw '{
    "query": "Bearer auth (e.g. ",
    "offset": 0,
    "count": 10
}'
```
```json
{"count":1,"index":"payment_attempts","hits":[{"payment_id":"pay_YVRqba3s481F4MHN5Hv9","merchant_id":"merchant_1711008266","attempt_id":"pay_YVRqba3s481F4MHN5Hv9_1","status":"failure","amount":6540,"currency":"USD","save_to_locker":null,"connector":"stripe","error_message":"No error message","offer_amount":null,"surcharge_amount":null,"tax_amount":null,"payment_method_id":null,"payment_method":"card","connector_transaction_id":null,"capture_method":"automatic","capture_on":1662804672,"confirm":true,"authentication_type":"no_three_ds","created_at":1711008789,"modified_at":1711008790,"last_synced":1711008789,"cancellation_reason":null,"amount_to_capture":6540,"mandate_id":null,"browser_info":null,"error_code":"No error code","connector_metadata":null,"payment_experience":null,"payment_method_type":"credit","payment_method_data":"{\"card\":{\"last4\":\"4242\",\"bank_code\":null,\"card_isin\":\"424242\",\"card_type\":null,\"card_issuer\":null,\"card_network\":null,\"card_exp_year\":\"25\",\"card_exp_month\":\"10\",\"payment_checks\":null,\"card_holder_name\":\"joseph Doe\",\"card_extended_bin\":\"42424242\",\"authentication_data\":null,\"card_issuing_country\":null}}","error_reason":"You did not provide an API key. You need to provide your API key in the Authorization header, using Bearer auth (e.g. 'Authorization: Bearer YOUR_SECRET_KEY'). See https://stripe.com/docs/api#authentication for details, or we can help at https://support.stripe.com/.","multiple_capture_count":null,"amount_capturable":0,"merchant_connector_id":"mca_eQ5bf2NARvV0cMAHloyM","net_amount":6540,"unified_code":null,"unified_message":null,"mandate_data":null,"sign_flag":1}]}
```

```
curl --location --request POST 'http://localhost:8080/analytics/v1/search/payment_attempts' \
--header 'api-key: hyperswitch' \
--header 'authorization: Bearer *' \
--header 'content-type: application/json' \
--data-raw '{
    "query": "Unexpected communication error with connector/acquirer",
    "offset": 0,
    "count": 10
}'
```
```json
{"count":0,"index":"payment_attempts","hits":[]}
```

Pull request description:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [x] Bugfix
- [ ] New feature
- [ ] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
escape reserved characters in global search query


### Additional Changes

- [ ] This PR modifies the API contract
- [ ] This PR modifies the database schema
- [ ] This PR modifies application configuration/environment variables

<!--
Provide links to the files with corresponding changes.

Following are the paths where you can find config files:
1. `config`
2. `crates/router/src/configs`
3. `loadtest/config`
-->


## Motivation and Context
escape [reserved](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_reserved_characters) characters in global search query

## How did you test it?
```
curl --location --request POST 'http://localhost:8080/analytics/v1/search/payment_attempts' \
--header 'api-key: hyperswitch' \
--header 'authorization: Bearer *' \
--header 'content-type: application/json' \
--data-raw '{
    "query": "Bearer auth (e.g. ",
    "offset": 0,
    "count": 10
}'
```
```json
{"count":1,"index":"payment_attempts","hits":[{"payment_id":"pay_YVRqba3s481F4MHN5Hv9","merchant_id":"merchant_1711008266","attempt_id":"pay_YVRqba3s481F4MHN5Hv9_1","status":"failure","amount":6540,"currency":"USD","save_to_locker":null,"connector":"stripe","error_message":"No error message","offer_amount":null,"surcharge_amount":null,"tax_amount":null,"payment_method_id":null,"payment_method":"card","connector_transaction_id":null,"capture_method":"automatic","capture_on":1662804672,"confirm":true,"authentication_type":"no_three_ds","created_at":1711008789,"modified_at":1711008790,"last_synced":1711008789,"cancellation_reason":null,"amount_to_capture":6540,"mandate_id":null,"browser_info":null,"error_code":"No error code","connector_metadata":null,"payment_experience":null,"payment_method_type":"credit","payment_method_data":"{\"card\":{\"last4\":\"4242\",\"bank_code\":null,\"card_isin\":\"424242\",\"card_type\":null,\"card_issuer\":null,\"card_network\":null,\"card_exp_year\":\"25\",\"card_exp_month\":\"10\",\"payment_checks\":null,\"card_holder_name\":\"joseph Doe\",\"card_extended_bin\":\"42424242\",\"authentication_data\":null,\"card_issuing_country\":null}}","error_reason":"You did not provide an API key. You need to provide your API key in the Authorization header, using Bearer auth (e.g. 'Authorization: Bearer YOUR_SECRET_KEY'). See https://stripe.com/docs/api#authentication for details, or we can help at https://support.stripe.com/.","multiple_capture_count":null,"amount_capturable":0,"merchant_connector_id":"mca_eQ5bf2NARvV0cMAHloyM","net_amount":6540,"unified_code":null,"unified_message":null,"mandate_data":null,"sign_flag":1}]}
```


## Checklist
<!-- Put an `x` in the boxes that apply -->

- [x] I formatted the code `cargo +nightly fmt --all`
- [x] I addressed lints thrown by `cargo clippy`
- [x] I reviewed the submitted code
- [ ] I added unit tests for my changes where possible
- [ ] I added a [CHANGELOG](/CHANGELOG.md) entry if applicable


Testing:
```
curl --location --request POST 'http://localhost:8080/analytics/v1/search/payment_attempts' \
--header 'api-key: hyperswitch' \
--header 'authorization: Bearer *' \
--header 'content-type: application/json' \
--data-raw '{
    "query": "Bearer auth (e.g. ",
    "offset": 0,
    "count": 10
}'
```
```json
{"count":1,"index":"payment_attempts","hits":[{"payment_id":"pay_YVRqba3s481F4MHN5Hv9","merchant_id":"merchant_1711008266","attempt_id":"pay_YVRqba3s481F4MHN5Hv9_1","status":"failure","amount":6540,"currency":"USD","save_to_locker":null,"connector":"stripe","error_message":"No error message","offer_amount":null,"surcharge_amount":null,"tax_amount":null,"payment_method_id":null,"payment_method":"card","connector_transaction_id":null,"capture_method":"automatic","capture_on":1662804672,"confirm":true,"authentication_type":"no_three_ds","created_at":1711008789,"modified_at":1711008790,"last_synced":1711008789,"cancellation_reason":null,"amount_to_capture":6540,"mandate_id":null,"browser_info":null,"error_code":"No error code","connector_metadata":null,"payment_experience":null,"payment_method_type":"credit","payment_method_data":"{\"card\":{\"last4\":\"4242\",\"bank_code\":null,\"card_isin\":\"424242\",\"card_type\":null,\"card_issuer\":null,\"card_network\":null,\"card_exp_year\":\"25\",\"card_exp_month\":\"10\",\"payment_checks\":null,\"card_holder_name\":\"joseph Doe\",\"card_extended_bin\":\"42424242\",\"authentication_data\":null,\"card_issuing_country\":null}}","error_reason":"You did not provide an API key. You need to provide your API key in the Authorization header, using Bearer auth (e.g. 'Authorization: Bearer YOUR_SECRET_KEY'). See https://stripe.com/docs/api#authentication for details, or we can help at https://support.stripe.com/.","multiple_capture_count":null,"amount_capturable":0,"merchant_connector_id":"mca_eQ5bf2NARvV0cMAHloyM","net_amount":6540,"unified_code":null,"unified_message":null,"mandate_data":null,"sign_flag":1}]}
```

Patch:
diff --git a/crates/analytics/src/search.rs b/crates/analytics/src/search.rs
index d9b8433ba63..4c42e96250b 100644
--- a/crates/analytics/src/search.rs
+++ b/crates/analytics/src/search.rs
@@ -81,7 +81,7 @@ pub async fn msearch_results(
     for index in SearchIndex::iter() {
         msearch_vector
             .push(json!({"index": search_index_to_opensearch_index(index,&config.indexes)}).into());
-        msearch_vector.push(json!({"query": {"bool": {"must": {"query_string": {"query": req.query}}, "filter": {"match_phrase": {"merchant_id": merchant_id}}}}}).into());
+        msearch_vector.push(json!({"query": {"bool": {"filter": [{"multi_match": {"type": "phrase", "query": req.query, "lenient": true}},{"match_phrase": {"merchant_id": merchant_id}}]}}}).into());
     }
 
     let response = client
@@ -128,7 +128,7 @@ pub async fn search_results(
         .search(SearchParts::Index(&[&search_index_to_opensearch_index(req.index.clone(),&config.indexes)]))
         .from(search_req.offset)
         .size(search_req.count)
-        .body(json!({"query": {"bool": {"must": {"query_string": {"query": search_req.query}}, "filter": {"match_phrase": {"merchant_id": merchant_id}}}}}))
+        .body(json!({"query": {"bool": {"filter": [{"multi_match": {"type": "phrase", "query": search_req.query, "lenient": true}},{"match_phrase": {"merchant_id": merchant_id}}]}}}))
         .send()
         .await
         .map_err(|_| AnalyticsError::UnknownError)?;