PHPackages                             fareselshinawy/elastic-search - 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. fareselshinawy/elastic-search

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

fareselshinawy/elastic-search
=============================

elastic-search package provides a seamless integeration of elastic search into laravel appications, desinged to simplify search and indexing functionalities. It offers an easy-to-use interface for managing elastic search queries, along with full support for multi tenant and standard projects.

v1.0.0(1y ago)012MITPHPPHP &gt;=8.0.0

Since Oct 26Pushed 1y ago1 watchersCompare

[ Source](https://github.com/faresElshinawy/elastic-search)[ Packagist](https://packagist.org/packages/fareselshinawy/elastic-search)[ RSS](/packages/fareselshinawy-elastic-search/feed)WikiDiscussions main Synced yesterday

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

Laravel Elasticsearch Integration Package
=========================================

[](#laravel-elasticsearch-integration-package)

The package provides seamless integration with Elasticsearch, supporting multi-tenant architecture and offering an intuitive query builder interface.

Features
--------

[](#features)

- Easy integration with Laravel models
- Built-in multi-tenant support using stancl/tenancy
- Fluent query builder interface
- Automated index management
- Configurable schema mappings
- Relationship syncing support
- Artisan commands for index management

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require fareselshinawy/elasticsearch
```

If you plan to use multi-tenant features: multi tenant can be extend to other packages be making your own tenant adapter implementing TenantAdapterInterface

```
composer require stancl/tenancy
```

Configuration
-------------

[](#configuration)

Publish the configuration file:

```
php artisan vendor:publish --provider="Fareselshinawy\ElasticSearch\Providers\ElasticSearchServiceProvider"
```

Configure your Elasticsearch credentials in your `.env` file:

```
ELASTIC_API_ENDPOINT=your-elasticsearch-endpoint
ELASTIC_API_KEY=your-api-key
ELASTIC_INDEX_PREFIX=optional-prefix
ELASTIC_DEFAULT_SIZE_VARIABLE=10
ELASTIC_INDEX_SYNC_CHUNK_SIZE=500
ENABLE_ELASTIC_FOR_TENANTS=true
```

Usage
-----

[](#usage)

### Model Setup

[](#model-setup)

To make your model searchable with Elasticsearch, add the following methods to your model:

```
use Fareselshinawy\ElasticSearch\Traits\ElasticSearchable;

class User extends Model
{
    use ElasticSearchable;

    // Required: Define the data to be synchronized with Elasticsearch
    public function getElasticSearchSyncAbleData()
    {
        return [
            "name"  => Str::lower($this->name),
            "email" => $this->email,
            "id"    => $this->id
        ];
    }

    // Optional: Define custom index mappings
    public function getIndexableProperties()
    {
        return [
            "name"  => ['type' => 'keyword'],
            "email" => ['type' => 'keyword'],
            "id"    => ['type' => 'integer']
        ];
    }

    // Optional: Define relations to sync as example department:id,name..etc
    public $elasticSyncAbleRelations = [];

    // Optional: Define dependent indexes that should be updated ( relation => class ) users => User::class
    public $dependentIndexesRelations = [];

    // Optional: Custom index name
    public function getElasticIndexKey()
    {
        return $this->indexPrefix() . 'users';
    }
}
```

### Query Builder Usage

[](#query-builder-usage)

The package provides a fluent interface for building Elasticsearch queries:

```
// Basic queries
User::elasticWhere('name', 'John')
    ->elasticOrWhere('email', 'john@example.com')
    ->elasticGet();

// Wildcard searches
User::elasticWhereLike('name', 'jo')
    ->elasticWhereStartWith('email', 'john')
    ->elasticGet();

// Range queries
User::elasticRange('age', 18, 30)->elasticGet();

// Term queries
User::elasticTermMust('status', 'active')
    ->elasticTermMustNot('role', 'guest')
    ->elasticGet();

// Match queries
User::elasticWhereMatch('description', 'search text')
    ->elasticWhereMatchPhrase('title', 'exact phrase')
    ->elasticGet();

// Nested queries
User::elasticNested('orders', function($query) {
    $query->elasticWhere('status', 'completed');
})->elasticGet();

// Sorting
User::elasticSortBy('created_at', 'desc')->elasticGet();

// Pagination
User::elasticWhere('status', 'active')->elasticPaginate(15);
```

### Available Query Methods

[](#available-query-methods)

#### Term Queries

[](#term-queries)

- `elasticTerm(field, value, conditionType = 'must')`
- `elasticTermMust(field, value)`
- `elasticTermMustNot(field, value)`
- `elasticTermShould(field, value)`

#### Terms Queries (Arrays)

[](#terms-queries-arrays)

- `elasticTerms(field, values, conditionType = 'must')`
- `elasticTermMustIn(field, values)`
- `elasticTermMustNotIn(field, values)`
- `elasticTermShouldIn(field, values)`

#### Match Queries

[](#match-queries)

- `elasticMatch(field, value, conditionType = 'must')`
- `elasticWhereMatch(field, value)`
- `elasticOrWhereMatch(field, value)`
- `elasticMatchMustNot(field, value)`

#### Wildcard Queries

[](#wildcard-queries)

- `elasticWildcard(field, value)`
- `elasticWildcardLike(field, value)`
- `elasticWildcardStartWith(field, value)`
- `elasticWildcardEndWith(field, value)`

#### Range Queries

[](#range-queries)

- `elasticRange(field, from, to)`
- `elasticGreaterOrEqual(field, value)`
- `elasticLessOrEqual(field, value)`

### Artisan Commands

[](#artisan-commands)

The package provides several Artisan commands for index management:

#### Standard Commands

[](#standard-commands)

```
php artisan elastic:index-create        # Create index
php artisan elastic:index-delete        # Delete index
php artisan elastic:index-sync          # Sync data
php artisan elastic:index-update        # Update index
```

#### Multi-tenant Commands

[](#multi-tenant-commands)

```
php artisan elastic:tenants-index-create  # Create tenant index
php artisan elastic:tenants-index-delete  # Delete tenant index
php artisan elastic:tenants-index-sync    # Sync tenant data
php artisan elastic:tenants-index-update  # Update tenant index
```

For tenant-specific operations, use the `--tenantReference` flag:

```
php artisan elastic:tenants-index-sync --tenantReference=tenant1
```

Multi-tenant Support
--------------------

[](#multi-tenant-support)

The package integrates with `stancl/tenancy` for multi-tenant support. Configure tenant-specific settings in the config file:

```
'enable_elastic_for_tenants' => true,
'tenants_indexable' => [
    'user' => new App\Models\User
],
'tenant_model' => 'App\Models\Tenant',
'tenancy_facade' => 'Stancl\Tenancy\Facades\Tenancy',
```

Security
--------

[](#security)

If you discover any security-related issues, please email \[\] instead of using the issue tracker.

Credits
-------

[](#credits)

- \[Fares Ashraf Ibrahim Elshinawy\]

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

25

—

LowBetter than 35% of packages

Maintenance34

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 53.6% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

617d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7de46ecc2255a0145eae8f71a3a866a07e5828e998b5a2f8122a358fa41469f3?d=identicon)[faresElshinawy](/maintainers/faresElshinawy)

---

Top Contributors

[![michoQW](https://avatars.githubusercontent.com/u/58602251?v=4)](https://github.com/michoQW "michoQW (15 commits)")[![faresElshinawy](https://avatars.githubusercontent.com/u/129311027?v=4)](https://github.com/faresElshinawy "faresElshinawy (13 commits)")

### Embed Badge

![Health badge](/badges/fareselshinawy-elastic-search/health.svg)

```
[![Health](https://phpackages.com/badges/fareselshinawy-elastic-search/health.svg)](https://phpackages.com/packages/fareselshinawy-elastic-search)
```

###  Alternatives

[mailerlite/laravel-elasticsearch

An easy way to use the official PHP ElasticSearch client in your Laravel applications.

936603.4k2](/packages/mailerlite-laravel-elasticsearch)[unopim/unopim

UnoPim Laravel PIM

10.5k2.4k](/packages/unopim-unopim)[matchish/laravel-scout-elasticsearch

Search among multiple models with ElasticSearch and Laravel Scout

7491.7M3](/packages/matchish-laravel-scout-elasticsearch)[jeroen-g/explorer

Next-gen Elasticsearch driver for Laravel Scout.

399672.8k](/packages/jeroen-g-explorer)[spatie/elasticsearch-search-string-parser

Build Elasticsearch queries based of a query string

5023.7k](/packages/spatie-elasticsearch-search-string-parser)[heyday/silverstripe-elastica

Provides Elastic Search integration for SilverStripe DataObjects using Elastica

1138.5k2](/packages/heyday-silverstripe-elastica)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
