# ElasticsearchBuilderExtensions Methods

- Package: [Aspire.Hosting.Elasticsearch](/reference/api/csharp/aspire.hosting.elasticsearch.md)
- Type: [ElasticsearchBuilderExtensions](/reference/api/csharp/aspire.hosting.elasticsearch/elasticsearchbuilderextensions.md)
- Kind: `Methods`
- Members: `3`

Provides extension methods for adding Elasticsearch resources to the application model.

## AddElasticsearch(IDistributedApplicationBuilder, string, IResourceBuilder<ParameterResource>, int?)

- Name: `AddElasticsearch(IDistributedApplicationBuilder, string, IResourceBuilder<ParameterResource>, int?)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<ElasticsearchResource>`
- Source: [GitHub](https://github.com/elastic/elastic-aspire-dotnet/blob/cb75438c68bc9385b00564d69ba8f537c26a696d/src/Aspire.Hosting.Elasticsearch/ElasticsearchBuilderExtensions.cs#L50-L92)

Adds an Elasticsearch container resource to the application model.

```csharp
public static class ElasticsearchBuilderExtensions
{
    public static IResourceBuilder<ElasticsearchResource> AddElasticsearch(
        this IDistributedApplicationBuilder builder,
        string name,
        IResourceBuilder<ParameterResource>? password = null,
        int? port = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IDistributedApplicationBuilder`)
  The `Hosting.IDistributedApplicationBuilder`.
- `name` (`string`)
  The name of the resource. This name will be used as the connection string name when referenced in a dependency.
- `password` (`IResourceBuilder<ParameterResource>`) `optional`
  The parameter used to provide the superuser password for the elasticsearch. If `null` a random password will be generated.
- `port` (`int?`) `optional`
  The host port to bind the underlying container to.

## Returns

`IResourceBuilder<ElasticsearchResource>` -- A reference to the `ApplicationModel.IResourceBuilder`1`.

## Remarks

This version of the package defaults to the tag of the container image. Add an Elasticsearch container to the application model and reference it in a .NET project.

```csharp
var builder = DistributedApplication.CreateBuilder(args);

var elasticsearch = builder.AddElasticsearch("elasticsearch");
var api = builder.AddProject<Projects.Api>("api")
  .WithReference(elasticsearch);

builder.Build().Run();
```

## WithDataBindMount(IResourceBuilder<ElasticsearchResource>, string)

- Name: `WithDataBindMount(IResourceBuilder<ElasticsearchResource>, string)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<ElasticsearchResource>`
- Source: [GitHub](https://github.com/elastic/elastic-aspire-dotnet/blob/cb75438c68bc9385b00564d69ba8f537c26a696d/src/Aspire.Hosting.Elasticsearch/ElasticsearchBuilderExtensions.cs#L148-L151)

Adds a bind mount for the data folder to a Elasticsearch container resource.

```csharp
public static class ElasticsearchBuilderExtensions
{
    public static IResourceBuilder<ElasticsearchResource> WithDataBindMount(
        this IResourceBuilder<ElasticsearchResource> builder,
        string source)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<ElasticsearchResource>`)
  The resource builder.
- `source` (`string`)
  The source directory on the host to mount into the container.

## Returns

`IResourceBuilder<ElasticsearchResource>` -- The `ApplicationModel.IResourceBuilder`1`.

## Remarks

Add an Elasticsearch container to the application model and reference it in a .NET project. Additionally, in this example a bind mount is added to the container to allow data to be persisted across container restarts.

```csharp
var builder = DistributedApplication.CreateBuilder(args);

var elasticsearch = builder.AddElasticsearch("elasticsearch")
.WithDataBindMount("./data/elasticsearch/data");
var api = builder.AddProject<Projects.Api>("api")
  .WithReference(elasticsearch);

builder.Build().Run();
```

## WithDataVolume(IResourceBuilder<ElasticsearchResource>, string?)

- Name: `WithDataVolume(IResourceBuilder<ElasticsearchResource>, string?)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<ElasticsearchResource>`
- Source: [GitHub](https://github.com/elastic/elastic-aspire-dotnet/blob/cb75438c68bc9385b00564d69ba8f537c26a696d/src/Aspire.Hosting.Elasticsearch/ElasticsearchBuilderExtensions.cs#L119-L121)

Adds a named volume for the data folder to a Elasticsearch container resource.

```csharp
public static class ElasticsearchBuilderExtensions
{
    public static IResourceBuilder<ElasticsearchResource> WithDataVolume(
        this IResourceBuilder<ElasticsearchResource> builder,
        string? name = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<ElasticsearchResource>`)
  The resource builder.
- `name` (`string?`) `optional`
  The name of the volume. Defaults to an auto-generated name based on the application and resource names.

## Returns

`IResourceBuilder<ElasticsearchResource>` -- The `ApplicationModel.IResourceBuilder`1`.

## Remarks

Add an Elasticsearch container to the application model and reference it in a .NET project. Additionally, in this example a data volume is added to the container to allow data to be persisted across container restarts.

```csharp
var builder = DistributedApplication.CreateBuilder(args);

var elasticsearch = builder.AddElasticsearch("elasticsearch")
.WithDataVolume();
var api = builder.AddProject<Projects.Api>("api")
  .WithReference(elasticsearch);

builder.Build().Run();
```
