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 Также в библиотеке
Тестирование в Kotlin: фреймворки и инструменты для качественного кода
Конфигурация приложений Rust: библиотеки config, envy и dotenvy
Работа с CSV в Java: библиотеки OpenCSV, Apache Commons CSV и Java Scanner