Elasticsearch клиент для PHP: elasticsearch-php. Полное руководство

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Elasticsearch клиент для PHP: elasticsearch-php

Elasticsearch — это мощная распределённая поисковая система и аналитическая база данных, построенная на Apache Lucene. Для взаимодействия с ней из PHP-приложений существует официальный клиент — elasticsearch-php. Эта библиотека предоставляет удобный и полный API для всех операций: от индексации документов до сложных полнотекстовых запросов и агрегаций.

Установка и подключение

Установка осуществляется через Composer — стандартный менеджер пакетов для PHP:

composer require elasticsearch/elasticsearch

После установки необходимо создать экземпляр клиента, указав хост (или несколько хостов) вашего Elasticsearch-кластера:

<?php
require 'vendor/autoload.php';

use Elastic\Elasticsearch\ClientBuilder;

$client = ClientBuilder::create()
    ->setHosts(['http://localhost:9200'])
    ->build();
?>

Для безопасного подключения (HTTPS, аутентификация) можно передать дополнительные параметры:

$client = ClientBuilder::create()
    ->setHosts(['https://user:password@my-elastic.cloud:9243'])
    ->setSSLVerification(false) // только для тестов!
    ->build();

Основные операции с данными

Создание индекса

Индекс в Elasticsearch — аналог базы данных в SQL. Перед сохранением данных его можно явно создать с маппингом:

$params = [
    'index' => 'products',
    'body' => [
        'settings' => [
            'number_of_shards' => 1,
            'number_of_replicas' => 1
        ],
        'mappings' => [
            'properties' => [
                'title' => ['type' => 'text'],
                'price' => ['type' => 'float'],
                'created_at' => ['type' => 'date']
            ]
        ]
    ]
];

$response = $client->indices()->create($params);

Индексация документа (добавление/обновление)

Для добавления одного документа используется метод index:

$params = [
    'index' => 'products',
    'id' => '1',
    'body' => [
        'title' => 'Ноутбук ASUS ROG',
        'price' => 120000.00,
        'created_at' => '2025-01-15'
    ]
];

$response = $client->index($params);

Если документ с таким id уже существует — он будет перезаписан. Для частичного обновления используется update.

Получение документа

$params = [
    'index' => 'products',
    'id' => '1'
];

$response = $client->get($params);
$document = $response['_source'];
echo $document['title']; // Ноутбук ASUS ROG

Удаление документа

$params = [
    'index' => 'products',
    'id' => '1'
];

$response = $client->delete($params);

Поиск и фильтрация

Самая мощная возможность Elasticsearch — полнотекстовый поиск. Пример поиска товаров по названию:

$params = [
    'index' => 'products',
    'body' => [
        'query' => [
            'match' => [
                'title' => 'ноутбук'
            ]
        ]
    ]
];

$response = $client->search($params);

// Обработка результатов
foreach ($response['hits']['hits'] as $hit) {
    echo 'ID: ' . $hit['_id'] . ', Title: ' . $hit['_source']['title'] . "\n";
}

Можно комбинировать условия с помощью bool запросов:

$params = [
    'index' => 'products',
    'body' => [
        'query' => [
            'bool' => [
                'must' => [
                    ['match' => ['title' => 'ноутбук']]
                ],
                'filter' => [
                    ['range' => ['price' => ['gte' => 50000]]]
                ]
            ]
        ]
    ]
];

Агрегации (статистика)

Elasticsearch позволяет выполнять аналитические запросы прямо в поиске. Пример — средняя цена товаров:

$params = [
    'index' => 'products',
    'body' => [
        'size' => 0,
        'ag                    

Рекомендаций