Skip to main content
This guide walks you through setting up Meilisearch with PHP.

Prerequisites

1. Install the SDK

composer require meilisearch/meilisearch-php

2. Connect to Meilisearch

<?php

require_once __DIR__ . '/vendor/autoload.php';

use Meilisearch\Client;

$client = new Client(
    getenv('MEILISEARCH_URL'),
    getenv('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

$movies = [
    ['id' => 1, 'title' => 'The Matrix', 'genres' => ['Action', 'Sci-Fi'], 'year' => 1999],
    ['id' => 2, 'title' => 'Inception', 'genres' => ['Action', 'Thriller'], 'year' => 2010],
    ['id' => 3, 'title' => 'Interstellar', 'genres' => ['Drama', 'Sci-Fi'], 'year' => 2014]
];

// Add documents to the 'movies' index
$task = $client->index('movies')->addDocuments($movies);

// Wait for indexing to complete
$client->waitForTask($task['taskUid']);
$results = $client->index('movies')->search('matrix');

print_r($results->getHits());
// [['id' => 1, 'title' => 'The Matrix', 'genres' => ['Action', 'Sci-Fi'], 'year' => 1999]]

5. Search with filters

First, configure filterable attributes:
$client->index('movies')->updateFilterableAttributes(['genres', 'year']);
Then search with filters:
$results = $client->index('movies')->search('', [
    'filter' => 'genres = "Sci-Fi" AND year > 2000'
]);

Full example

<?php

require_once __DIR__ . '/vendor/autoload.php';

use Meilisearch\Client;

$client = new Client(
    getenv('MEILISEARCH_URL'),
    getenv('MEILISEARCH_API_KEY')
);

// Add documents
$movies = [
    ['id' => 1, 'title' => 'The Matrix', 'genres' => ['Action', 'Sci-Fi'], 'year' => 1999],
    ['id' => 2, 'title' => 'Inception', 'genres' => ['Action', 'Thriller'], 'year' => 2010],
    ['id' => 3, 'title' => 'Interstellar', 'genres' => ['Drama', 'Sci-Fi'], 'year' => 2014]
];

$task = $client->index('movies')->addDocuments($movies);
$client->waitForTask($task['taskUid']);

// Search
$results = $client->index('movies')->search('inter');
print_r($results->getHits());

Laravel integration

For Laravel applications, use Laravel Scout with the Meilisearch driver:
composer require laravel/scout
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
Configure in your .env:
SCOUT_DRIVER=meilisearch
MEILISEARCH_HOST=https://your-instance.meilisearch.io
MEILISEARCH_KEY=your_api_key
See the full Laravel Scout guide →

Next steps

Laravel Scout

Full Laravel integration guide

Full-text search

Configure ranking and relevancy

Filtering

Add filters and facets

API reference

Explore all search parameters

Resources