# Elastic raw querying
When using the Elastic search provider, Ucommerce supports raw queries to the provider in two forms: raw JSON and NEST queries.
This is for special requirements, when you need functionality not covered by the Ucommerce search APIs.
## Examples
### Raw JSON string
You can pass a JSON string to the `FindRaw()` method. This query is then forwarded to the provider followed by the default skip, take and sort parameters.
```csharp
var query = @"{
""term"" : {
""Sku"" : {""value"":""shirt""}
}
}";
var products = Index.FindRaw(query).ToList();
```
For further information on what is supported by the provider, please visit the [Elastic documentation.](https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/raw-query-usage.html)
### Nest query
If you are looking to use DSL to query instead, you can do this by passing a `Nest.SearchDescriptor<T>` instance to the `FindRaw()` method.
```csharp
var query =
new SearchDescriptor<TestProduct>()
.Query(q =>
q.Match(m =>
m.Field(f => f.Sku)
.Query("shirt")
)
);
var products = Index.FindRaw(query).ToList();
```
For further information on querying using DLS, please visit the [Elastic documentation.](https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/query-dsl.html)
### Custom model queries
When retrieving data from a raw query, it is possible to specify a custom model by providing it as a type argument to the `FindRaw<T>()` method. This is useful when, for example, you want a subset of the fields returned only from the index for a particular query.
This works with both syntaxes mentioned above.
```csharp
public class CustomProduct: Model
{
public string Name { get; set; }
public int Id { get; set; }
}
```
```csharp
var query =
new SearchDescriptor<CustomProduct>()
.Query(q =>
q.Match(m =>
m.Field(f => f.Id)
.Query("23")
)
);
var products = Index.FindRaw<CustomProduct>(query).ToList();
```