{"id":20002840,"url":"https://github.com/babenkoivan/elastic-scout-driver-plus","last_synced_at":"2026-02-27T10:52:48.884Z","repository":{"id":36970124,"uuid":"240678347","full_name":"babenkoivan/elastic-scout-driver-plus","owner":"babenkoivan","description":"Extension for Elastic Scout Driver","archived":false,"fork":false,"pushed_at":"2026-02-16T18:19:03.000Z","size":3836,"stargazers_count":285,"open_issues_count":1,"forks_count":56,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-02-17T00:41:12.355Z","etag":null,"topics":["driver","elastic","elasticsearch","extension","laravel","php","scout"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/babenkoivan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"ivanbabenko","custom":["https://paypal.me/babenkoi"]}},"created_at":"2020-02-15T09:38:03.000Z","updated_at":"2026-01-31T22:26:29.000Z","dependencies_parsed_at":"2024-05-31T08:40:58.442Z","dependency_job_id":"eee93fc3-32c8-4eae-a362-59bdc98dc023","html_url":"https://github.com/babenkoivan/elastic-scout-driver-plus","commit_stats":{"total_commits":250,"total_committers":9,"mean_commits":27.77777777777778,"dds":"0.10799999999999998","last_synced_commit":"60686cc8989217327df7cdc9e71c15e5c67a19e8"},"previous_names":[],"tags_count":61,"template":false,"template_full_name":null,"purl":"pkg:github/babenkoivan/elastic-scout-driver-plus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/babenkoivan%2Felastic-scout-driver-plus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/babenkoivan%2Felastic-scout-driver-plus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/babenkoivan%2Felastic-scout-driver-plus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/babenkoivan%2Felastic-scout-driver-plus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/babenkoivan","download_url":"https://codeload.github.com/babenkoivan/elastic-scout-driver-plus/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/babenkoivan%2Felastic-scout-driver-plus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29892063,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T09:48:51.284Z","status":"ssl_error","status_checked_at":"2026-02-27T09:48:43.992Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["driver","elastic","elasticsearch","extension","laravel","php","scout"],"created_at":"2024-11-13T05:23:16.353Z","updated_at":"2026-02-27T10:52:48.876Z","avatar_url":"https://github.com/babenkoivan.png","language":"PHP","funding_links":["https://ko-fi.com/ivanbabenko","https://paypal.me/babenkoi"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg width=\"400px\" src=\"logo.gif\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://packagist.org/packages/babenkoivan/elastic-scout-driver-plus\"\u003e\u003cimg src=\"https://poser.pugx.org/babenkoivan/elastic-scout-driver-plus/v/stable\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://packagist.org/packages/babenkoivan/elastic-scout-driver-plus\"\u003e\u003cimg src=\"https://poser.pugx.org/babenkoivan/elastic-scout-driver-plus/downloads\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://packagist.org/packages/babenkoivan/elastic-scout-driver-plus\"\u003e\u003cimg src=\"https://poser.pugx.org/babenkoivan/elastic-scout-driver-plus/license\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/babenkoivan/elastic-scout-driver-plus/actions?query=workflow%3ATests\"\u003e\u003cimg src=\"https://github.com/babenkoivan/elastic-scout-driver-plus/workflows/Tests/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/babenkoivan/elastic-scout-driver-plus/actions?query=workflow%3A%22Code+style%22\"\u003e\u003cimg src=\"https://github.com/babenkoivan/elastic-scout-driver-plus/workflows/Code%20style/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/babenkoivan/elastic-scout-driver-plus/actions?query=workflow%3A%22Static+analysis%22\"\u003e\u003cimg src=\"https://github.com/babenkoivan/elastic-scout-driver-plus/workflows/Static%20analysis/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://paypal.me/babenkoi\"\u003e\u003cimg src=\"https://img.shields.io/badge/donate-paypal-blue\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://ko-fi.com/ivanbabenko\" target=\"_blank\"\u003e\u003cimg src=\"https://ko-fi.com/img/githubbutton_sm.svg\" alt=\"Support the project!\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\nExtension for [Elastic Scout Driver](https://github.com/babenkoivan/elastic-scout-driver).\n\n## Contents\n\n* [Features](#features)\n* [Compatibility](#compatibility)\n* [Installation](#installation)\n* [Usage](#usage)\n  * [Query](#query)\n  * [Search parameters](#search-parameters)\n  * [Search results](#search-results)\n  * [Custom routing](#custom-routing)\n  * [Eager loading relations](#eager-loading-relations)\n  * [Multiple connections](#multiple-connections)\n\n## Features\n\nElastic Scout Driver Plus supports:\n\n* [Aggregations](docs/available-methods.md#aggregate)\n* [Custom routing](#custom-routing)\n* [Highlighting](docs/available-methods.md#highlight)\n* [Multiple connections](#multiple-connections)\n* [Search across multiple indices](docs/available-methods.md#join)\n* [Search after](docs/available-methods.md#searchafter)\n* [Source filtering](docs/available-methods.md#source)\n* [Suggesters](docs/available-methods.md#suggest)\n\n## Compatibility\n\nThe current version of Elastic Scout Driver Plus has been tested with the following configuration:\n\n* PHP 8.2\n* Elasticsearch 9.x\n* Laravel 12.x\n* Laravel Scout 10.x\n\nIf your project uses older Elasticsearch, Laravel, or PHP version check [the previous major version](https://github.com/babenkoivan/elastic-scout-driver-plus/tree/v5.1.0#compatibility) of the package.\n\n## Installation\n\nThe library can be installed via Composer:\n\n```bash\ncomposer require babenkoivan/elastic-scout-driver-plus\n```\n\n**Note** that this library doesn't work without Elastic Scout Driver. If it's not installed yet, please follow\nthe installation steps described [here](https://github.com/babenkoivan/elastic-scout-driver#installation). If you\nalready use Elastic Scout Driver, I recommend you to update it before installing Elastic Scout Driver Plus:\n\n```bash\ncomposer update babenkoivan/elastic-scout-driver\n```\n\nAfter installing the libraries, you need to add `Elastic\\ScoutDriverPlus\\Searchable` trait to your models. In case \nsome models already use the standard `Laravel\\Scout\\Searchable` trait, you should replace it with the one provided by \nElastic Scout Driver Plus.\n\nIf you want to use Elastic Scout Driver Plus with [Lumen framework](https://lumen.laravel.com/)\nrefer to [this guide](https://github.com/babenkoivan/elastic-scout-driver-plus/wiki/Lumen-Installation).\n\n## Usage\n\n### Query\n\nBefore you begin searching a model, you should define a query. You can either use a query builder or describe the query\nwith an array:\n\n```php\nuse Elastic\\ScoutDriverPlus\\Support\\Query;\n\n// using a query builder\n$query = Query::match()\n    -\u003efield('title')\n    -\u003equery('My book')\n    -\u003efuzziness('AUTO');\n\n// using a raw query\n$query = [\n    'match' =\u003e [\n        'title' =\u003e [\n            'query' =\u003e 'My book',\n            'fuzziness' =\u003e 'AUTO'\n        ] \n    ]\n];\n```\n\nEach method of `Elastic\\ScoutDriverPlus\\Support\\Query` factory creates a query builder for the respective type. \nAvailable methods are listed below:\n\n* [bool](docs/compound-queries.md#boolean)\n* [exists](docs/term-queries.md#exists)\n* [fuzzy](docs/term-queries.md#fuzzy)\n* [geoDistance](docs/geo-queries.md#geo-distance)\n* [geoShape](docs/geo-queries.md#geo-shape)\n* [ids](docs/term-queries.md#ids)\n* [matchAll](docs/full-text-queries.md#match-all)\n* [matchNone](docs/full-text-queries.md#match-none)\n* [matchPhrasePrefix](docs/full-text-queries.md#match-phrase-prefix)\n* [matchPhrase](docs/full-text-queries.md#match-phrase)\n* [match](docs/full-text-queries.md#match)\n* [multiMatch](docs/full-text-queries.md#multi-match)\n* [nested](docs/joining-queries.md#nested)\n* [prefix](docs/term-queries.md#prefix)\n* [range](docs/term-queries.md#range)\n* [regexp](docs/term-queries.md#regexp)\n* [term](docs/term-queries.md#term)\n* [terms](docs/term-queries.md#terms)\n* [wildcard](docs/term-queries.md#wildcard)\n\n### Search Parameters\n\nWhen the query is defined, you can begin new search with `searchQuery` method:\n\n```php\n$builder = Book::searchQuery($query);\n```\n\nYou can then chain other parameters to make your search request more precise:\n\n```php\n$builder = Book::searchQuery($query)\n    -\u003esize(2)\n    -\u003esort('price', 'asc');\n```\n\nThe builder supports various search parameters and provides a number of useful helpers: \n\n* [aggregate](docs/available-methods.md#aggregate)\n* [collapse](docs/available-methods.md#collapse)\n* [explain](docs/available-methods.md#explain)\n* [from](docs/available-methods.md#from)\n* [highlight](docs/available-methods.md#highlight)\n* [join](docs/available-methods.md#join)\n* [load](docs/available-methods.md#load)\n* [minScore](docs/available-methods.md#minscore)\n* [postFilter](docs/available-methods.md#postfilter)\n* [size](docs/available-methods.md#size)\n* [sort](docs/available-methods.md#sort)\n* [refineModels](docs/available-methods.md#refinemodels)\n* [rescore](docs/available-methods.md#rescore)\n* [refineModels](docs/available-methods.md#refinemodels)\n* [scriptFields](docs/available-methods.md#scriptfields)\n* [runtimeMappings](docs/available-methods.md#runtimemappings)\n* [fields](docs/available-methods.md#fields)\n* [source](docs/available-methods.md#source)\n* [suggest](docs/available-methods.md#suggest)\n* [trackScores](docs/available-methods.md#trackscores)\n* [trackTotalHits](docs/available-methods.md#tracktotalhits)\n* [when](docs/available-methods.md#when)\n\n### Search Results\n\nYou can retrieve search results by chaining the `execute` method onto the builder:\n\n```php\n$searchResult = Book::searchQuery($query)-\u003eexecute();\n```\n\n`$searchResult` provides easy access to matching hits, models, documents, etc.:\n\n```php\n$hits = $searchResult-\u003ehits();\n$models = $searchResult-\u003emodels();\n$documents = $searchResult-\u003edocuments();\n$highlights = $searchResult-\u003ehighlights();\n```\n\nYou can get more familiar with the `$searchResult` object and learn how to paginate the search results on [this page](docs/search-results.md).  \n\n### Custom Routing\n\nIf you want to use a [custom shard routing](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-routing-field.html)\nfor your model, override the `searchableRouting` method:\n\n```php\nclass Book extends Model\n{\n    use Elastic\\ScoutDriverPlus\\Searchable;\n    \n    public function searchableRouting()\n    {\n        return $this-\u003euser-\u003eid;\n    }\n}\n```\n\nCustom routing is automatically applied to all index and delete operations.\n\n### Eager Loading Relations\n\nSometimes you need to index your model with related data:\n\n```php\nclass Book extends Model\n{\n    use Elastic\\ScoutDriverPlus\\Searchable;\n    \n    public function toSearchableArray()\n    {\n        return [\n            'title' =\u003e $this-\u003etitle,\n            'price' =\u003e $this-\u003eprice,\n            'author' =\u003e $this-\u003eauthor-\u003eonly(['name', 'phone_number']),\n        ];\n    }\n}\n```\n\nYou can improve the performance of bulk operations by overriding the `searchableWith` method:\n\n```php\nclass Book extends Model\n{\n    use Elastic\\ScoutDriverPlus\\Searchable;\n    \n    public function toSearchableArray()\n    {\n        return [\n            'title' =\u003e $this-\u003etitle,\n            'price' =\u003e $this-\u003eprice,\n            'author' =\u003e $this-\u003eauthor-\u003eonly(['name', 'phone_number']),\n        ];\n    }\n    \n    public function searchableWith()\n    {\n        return ['author'];\n    }\n}\n```\n\nIn case you are looking for a way to preload relations for models matching a search query, check the builder's\n`load` method [documentation](docs/available-methods.md#load).\n\n### Multiple Connections\n\nYou can configure multiple connections to Elasticsearch in the [client's configuration file](https://github.com/babenkoivan/elastic-client/tree/master#configuration).\nIf you want to change a connection used by a model, you need to override the `searchableConnection` method:\n\n```php\nclass Book extends Model\n{\n    use Elastic\\ScoutDriverPlus\\Searchable;\n    \n    public function searchableConnection(): ?string\n    {\n        return 'books';\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbabenkoivan%2Felastic-scout-driver-plus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbabenkoivan%2Felastic-scout-driver-plus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbabenkoivan%2Felastic-scout-driver-plus/lists"}