PHPackages                             kiyonori/elasticsearch-fluent-query-builder - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. kiyonori/elasticsearch-fluent-query-builder

ActiveLibrary[Search &amp; Filtering](/categories/search)

kiyonori/elasticsearch-fluent-query-builder
===========================================

Elasticsearch Fluent Query Builder.

v0.9.3(6mo ago)045[1 issues](https://github.com/Kiyonori/elasticsearch-fluent-query-builder/issues)MITPHPPHP ^8.2CI passing

Since Oct 23Pushed 6mo ago1 watchersCompare

[ Source](https://github.com/Kiyonori/elasticsearch-fluent-query-builder)[ Packagist](https://packagist.org/packages/kiyonori/elasticsearch-fluent-query-builder)[ RSS](/packages/kiyonori-elasticsearch-fluent-query-builder/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (4)Versions (5)Used By (0)

Elasticsearch Fluent Query Builder
==================================

[](#elasticsearch-fluent-query-builder)

[![License: MIT](https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667)](https://opensource.org/licenses/MIT)[![PHP Version](https://camo.githubusercontent.com/962aced9b09d89716dbebf186ff899754a096ff1068b6b7988675c2d9fab9331/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e322d626c75652e737667)](https://www.php.net/)[![Elasticsearch](https://camo.githubusercontent.com/c6947977837f28d8c93fdf546505b74f9cd7f66b7d972f098d81915cdcf32aad/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f456c61737469637365617263682d253545382e31372d6f72616e67652e737667)](https://www.elastic.co/)

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クエリ

[](#基本的な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', 'value５');
            }, 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`:

```
