Elasticsearch клиент для PHP (elasticsearch-php): мощный инструмент для поиска и аналитики
Elasticsearch — это распределённая поисковая и аналитическая система, построенная на базе Apache Lucene. Она позволяет хранить, искать и анализировать большие объёмы данных практически в реальном времени. Для взаимодействия с Elasticsearch из PHP-приложений существует официальный клиент — elasticsearch-php. Эта библиотека предоставляет удобный API для выполнения всех операций: от индексации документов до сложных поисковых запросов и агрегаций.
В этой статье мы подробно разберём установку, настройку и основные возможности elasticsearch-php. Вы узнаете, как подключиться к кластеру, создать индекс, добавить документы, выполнить поиск и использовать продвинутые функции, такие как фильтрация и агрегация данных.
Установка elasticsearch-php
Библиотека распространяется через Composer. Для установки выполните команду в корне вашего проекта:
composer require elasticsearch/elasticsearch
После установки в файле composer.json появится зависимость. Убедитесь, что у вас установлен PHP версии 7.4 или выше, а также расширение json.
Подключение к серверу Elasticsearch
Первый шаг — создание клиента. Для локального сервера (по умолчанию Elasticsearch слушает порт 9200) код будет выглядеть так:
<?php
require 'vendor/autoload.php';
use Elastic\Elasticsearch\ClientBuilder;
$client = ClientBuilder::create()
->setHosts(['localhost:9200'])
->build();
?>
Если ваш сервер требует аутентификации (например, через логин/пароль или API-ключ), передайте параметры:
$client = ClientBuilder::create()
->setHosts(['https://user:pass@localhost:9200'])
->setSSLVerification(false) // только для разработки
->build();
Работа с индексами и документами
Elasticsearch хранит данные в индексах (аналог таблиц в SQL). Создадим индекс products с простой маппингом:
$params = [
'index' => 'products',
'body' => [
'settings' => [
'number_of_shards' => 1,
'number_of_replicas' => 0
],
'mappings' => [
'properties' => [
'title' => ['type' => 'text'],
'price' => ['type' => 'float'],
'description' => ['type' => 'text'],
'category' => ['type' => 'keyword']
]
]
]
];
$response = $client->indices()->create($params);
Теперь добавим несколько документов:
$documents = [
['title' => 'Ноутбук Dell XPS 15', 'price' => 1200.00, 'description' => 'Мощный ультрабук для работы', 'category' => 'electronics'],
['title' => 'Книга "PHP для профессионалов"', 'price' => 45.50, 'description' => 'Изучение PHP на продвинутом уровне', 'category' => 'books'],
['title' => 'Наушники Sony WH-1000XM5', 'price' => 350.00, 'description' => 'Беспроводные наушники с шумоподавлением', 'category' => 'electronics']
];
foreach ($documents as $id => $doc) {
$params = [
'index' => 'products',
'id' => $id + 1,
'body' => $doc
];
$response = $client->index($params);
}
Поиск документов
Выполним полнотекстовый поиск по полю title:
$params = [
'index' => 'products',
'body' => [
'query' => [
'match' => [
'title' => 'ноутбук'
]
]
]
];
$response = $client->search($params);
$hits = $response['hits']['hits'];
foreach ($hits as $hit) {
echo "ID: " . $hit['_id'] . " | Title: " . $hit['_source']['title'] . " | Price: " . $hit['_source']['price'] . "\n";
}
Результат вернёт документ с ноутбуком. Обратите внимание, что Elasticsearch поддерживает нечёткий поиск, стемминг и релевантность.
Филь
Также в библиотеке
Работа с Excel в PHP: библиотеки PhpSpreadsheet и OpenSpout
Работа с S3 и облачными хранилищами в Node.js: библиотека @aws-sdk/client-s3
OAuth клиент для Kotlin: интеграция с провайдерами через ktor-client и kotlinx-serialization
Работа с Apache Kafka в Java: полное руководство для разработчика
Конфигурация приложений Go (Golang): библиотеки и инструменты