kiyonori/elasticsearch-fluent-query-builder
Composer 安装命令:
composer require kiyonori/elasticsearch-fluent-query-builder
包简介
Elasticsearch Fluent Query Builder.
README 文档
README
Elasticsearchのクエリビルダーとインデックス・ドキュメント操作機能を提供するPHPライブラリです。フルエントAPIを使用してElasticsearchクエリを直感的に構築できます。
特徴
- フルエントAPI:
- メソッドチェーンで Elasticsearch クエリを直感的に構築
- 型安全:
- PHP 8.2+の型システムを活用した安全な API
- 包括的なクエリサポート:
must,should,filter,must_notクエリをサポート
- インデックス管理:
- マッピングの適用、インデックスの削除、エイリアス管理
- ドキュメント操作:
- ドキュメントの保存、取得、更新、一括操作
要件
- PHP 8.2以上
- Elasticsearch 8.17以上
インストール
composer require kiyonori/elasticsearch-fluent-query-builder
使用方法
クエリビルダー
基本的なboolクエリ
use Kiyonori\ElasticsearchFluentQueryBuilder\Builders\Query; use Kiyonori\ElasticsearchFluentQueryBuilder\Builders\MustQuery; use Kiyonori\ElasticsearchFluentQueryBuilder\Builders\ShouldQuery; $query = app(Query::class); $result = $query ->bool(function (MustQuery $must) { $must ->bool(function (ShouldQuery $should) { $should ->match('title', 'elasticsearch') ->match('content', 'search engine'); }, minimumShouldMatch: 1) ->term('status', 'published') ->range('created_at', gte: '2024-01-01', lte: '2024-12-31'); }) ->toArray();
複雑なネストしたクエリ
$query = app(Query::class); $result = $query ->bool(function (MustQuery $must) { $must ->bool(function (ShouldQuery $should) { $should ->match('field_1', 'value1') ->match('field_2', 'value 2'); }, minimumShouldMatch: 1) ->bool(function (ShouldQuery $should) { $should ->match('field_3', 'value 333') ->match('field_4', 'value四') ->match('field_5', 'value5'); }, minimumShouldMatch: 2); }) ->toArray();
利用可能なクエリタイプ
MustQuery - 必須条件:
$must ->term('field', 'value') ->match('field', 'text') ->range('field', gte: 10, lte: 100) ->bool(function (ShouldQuery $should) { /* ... */ });
ShouldQuery - 任意条件:
$should ->term('field', 'value') ->match('field', 'text') ->range('field', gte: 10, lte: 100) ->bool(function (MustQuery $must) { /* ... */ });
FilterQuery - フィルター条件:
$filter ->term('field', 'value') ->match('field', 'text') ->range('field', gte: 10, lte: 100);
MustNotQuery - 除外条件:
$mustNot ->term('field', 'value') ->match('field', 'text') ->range('field', gte: 10, lte: 100);
インデックスとドキュメント操作
マッピングの適用
use Kiyonori\ElasticsearchFluentQueryBuilder\ApplyMapping; // JSONファイルからマッピングを適用(エイリアス付きでゼロダウンタイム) $newIndexName = app(ApplyMapping::class)->execute( jsonFilePath: 'path/to/mapping.json' );
ドキュメントの保存
use Kiyonori\ElasticsearchFluentQueryBuilder\StoreDocument; $response = app(StoreDocument::class)->execute( indexName: 'my_index', documentId: 'doc_123', body: [ 'title' => 'Sample Document', 'content' => 'This is a sample document', 'created_at' => '2024-01-01T00:00:00Z' ] );
ドキュメントの取得
use Kiyonori\ElasticsearchFluentQueryBuilder\GetDocument; $document = app(GetDocument::class)->execute( indexName: 'my_index', documentId: 'doc_123' );
インデックスの削除
use Kiyonori\ElasticsearchFluentQueryBuilder\DeleteIndex; $deletedIndices = app(DeleteIndex::class)->execute( indexName: 'my_index', suppressNotFoundException: true );
一括ドキュメント操作
use Kiyonori\ElasticsearchFluentQueryBuilder\BulkStoreDocuments; $response = app(BulkStoreDocuments::class)->execute( indexName: 'my_index', documents: [ ['id' => 'doc_1', 'body' => ['title' => 'Document 1']], ['id' => 'doc_2', 'body' => ['title' => 'Document 2']], ] );
設定ファイルの例
config/my-elasticsearch.php:
<?php return [ 'hosts' => [ 'http://elasticsearch:9200', ], 'ssl_verification' => false, 'user_name' => null, 'password' => null, ];
マッピングJSONファイルの例
{
"index": "my_index",
"body": {
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "standard"
},
"content": {
"type": "text",
"analyzer": "standard"
},
"created_at": {
"type": "date"
}
}
}
}
}
テスト
# テストの実行 make test
開発環境の構築
このリポジトリには Docker と Makefile が用意されています。以下の手順で最短で立ち上げられます。
1. 前提
- docker コマンドが利用可能であること
- make コマンドが利用可能であること
2. 初回セットアップと起動
make up
- 初回は
.envを自動生成します - 起動後、Elasticsearch は
http://localhost:${ELASTICSEARCH_OUTWARD_PORT}で待ち受けます - デフォルトポートは
.envで指定します(例:ELASTICSEARCH_OUTWARD_PORT=9200)
3. 設定ファイル
接続先は config/my-elasticsearch.php で管理します
<?php return [ 'hosts' => [ 'http://elasticsearch:9200', ], 'ssl_verification' => false, 'user_name' => null, 'password' => null, ];
hostsはコンテナ間通信用のホスト名elasticsearchを利用します- ホストOSから疎通確認する場合は
http://localhost:9200を利用します
4. 接続確認
curl -s http://localhost:9200/ | jq .
{
"name": "9fe5729c9607",
"cluster_name": "docker-cluster",
"cluster_uuid": "CRxG1rjBSICWjzoTxh-EWQ",
"version": {
"number": "8.18.0",
"build_flavor": "default",
"build_type": "docker",
"build_hash": "04e979aa50b657bebd4a0937389308de82c2bdad",
"build_date": "2025-04-10T10:09:16.444104780Z",
"build_snapshot": false,
"lucene_version": "9.12.1",
"minimum_wire_compatibility_version": "7.17.0",
"minimum_index_compatibility_version": "7.0.0"
},
"tagline": "You Know, for Search"
}
上記の JSON が返れば OK です
5. テスト / コード整形の実行
# テスト make test # コード整形 make pint
6. 開発環境の停止・再起動・クリーンアップ
# 停止 docker compose stop # 再起動 docker compose restart # 完全停止と削除(Elasticsearch のボリュームは残ります) docker compose down
ライセンス
このプロジェクトはMITライセンスの下で公開されています。詳細はLICENSEファイルを参照してください。
作者
- Kiyonori SAKAI
貢献
プルリクエストやイシューの報告を歓迎します。
kiyonori/elasticsearch-fluent-query-builder 适用场景与选型建议
kiyonori/elasticsearch-fluent-query-builder 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 36 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 11 月 24 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「search」 「fluent」 「elasticsearch」 「query-builder」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 kiyonori/elasticsearch-fluent-query-builder 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 kiyonori/elasticsearch-fluent-query-builder 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 kiyonori/elasticsearch-fluent-query-builder 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A Laravel package to retrieve data from Google Search Console
Presentation and Formatting helper with nice fluent interface.
Indexed Search Autocomplete - Extends the TYPO3 Core Extension Indexed_Search searchform with an autocomplete feature.
Abstraction Layer to index and search entities
simple api library.
Traits gathering fluent syntax common methods
统计信息
- 总下载量: 36
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 10
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-11-24