Skip to main content
This guide walks you through setting up Meilisearch with .NET (C#).

Prerequisites

1. Install the SDK

dotnet add package MeiliSearch

2. Connect to Meilisearch

using Meilisearch;

var client = new MeilisearchClient(
    Environment.GetEnvironmentVariable("MEILISEARCH_URL"),
    Environment.GetEnvironmentVariable("MEILISEARCH_API_KEY")
);
Set your environment variables:
export MEILISEARCH_URL="https://your-instance.meilisearch.io"  # or http://localhost:7700
export MEILISEARCH_API_KEY="your_api_key"
Get a free Cloud instance →

3. Add documents

// Define your document class
public class Movie
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string[] Genres { get; set; }
    public int Year { get; set; }
}

// Add documents
var movies = new Movie[]
{
    new Movie { Id = 1, Title = "The Matrix", Genres = new[] { "Action", "Sci-Fi" }, Year = 1999 },
    new Movie { Id = 2, Title = "Inception", Genres = new[] { "Action", "Thriller" }, Year = 2010 },
    new Movie { Id = 3, Title = "Interstellar", Genres = new[] { "Drama", "Sci-Fi" }, Year = 2014 }
};

var index = client.Index("movies");
var task = await index.AddDocumentsAsync(movies);

// Wait for indexing to complete
await client.WaitForTaskAsync(task.TaskUid);
var results = await index.SearchAsync<Movie>("matrix");

foreach (var hit in results.Hits)
{
    Console.WriteLine($"{hit.Title} ({hit.Year})");
}
// The Matrix (1999)

5. Search with filters

First, configure filterable attributes:
await index.UpdateFilterableAttributesAsync(new[] { "genres", "year" });
Then search with filters:
var results = await index.SearchAsync<Movie>("", new SearchQuery
{
    Filter = "genres = \"Sci-Fi\" AND year > 2000"
});

Full example

using Meilisearch;

var client = new MeilisearchClient(
    Environment.GetEnvironmentVariable("MEILISEARCH_URL"),
    Environment.GetEnvironmentVariable("MEILISEARCH_API_KEY")
);

// Add documents
var movies = new[]
{
    new { Id = 1, Title = "The Matrix", Year = 1999 },
    new { Id = 2, Title = "Inception", Year = 2010 },
    new { Id = 3, Title = "Interstellar", Year = 2014 }
};

var index = client.Index("movies");
var task = await index.AddDocumentsAsync(movies);
await client.WaitForTaskAsync(task.TaskUid);

// Search
var results = await index.SearchAsync<dynamic>("inter");
foreach (var hit in results.Hits)
{
    Console.WriteLine(hit);
}

Next steps

Full-text search

Configure ranking and relevancy

Filtering

Add filters and facets

AI-powered search

Add semantic search

API reference

Explore all search parameters

Resources