Laravel Swiftype is a wrapper for elastic/app-search with some Laravel specific helpers to make integrating your Eloquent Models with Swiftype a breeze.
Via Composer
composer require loonpwn/laravel-swiftype
If you do not run Laravel 5.5 (or higher), then add the service provider in config/app.php
:
Loonpwn\Swiftype\SwiftypeServiceProvider::class,
In your .env
file, add the following variables.
SWIFTYPE_DEFAULT_ENGINE=
SWIFTYPE_API_PRIVATE_KEY=
SWIFTYPE_HOST_IDENTIFIER=
Get your keys from the Swiftype Credentials page.
When self-hosting an instance of AppSearch, you can use the API Endpoint displayed on the credentials page as
SWIFTYPE_HOST_IDENTIFIER
, e.g.:
SWIFTYPE_HOST_IDENTIFIER=http://localhost:3002
This packages has two Facades which give you access to the underlying Swiftype client.
The Swiftype
facade is a direct wrapper for the built client from https://github.com/elastic/app-search-php. Any
command from the base client can be used on this facade. Example:
-
Swiftype::listEngines($currentPage = null, $pageSize = null)
- Show all engines available -
Swiftype::createEngine($name, $language = 'en')
- Find an engine based on name
With IDE auto-complete:
/** @var \Loonpwn\Swiftype\Clients\Api $api */
$api = app(Swiftype::class);
The SwiftypeEngine
is a wrapper on top of the Swiftype
facade with direct context of the default engine. Many of the
same functions from the core API is available in this facade without the need to specify an engine.
SwiftypeEngine::search($query, $options)
- Search documents within the engine
SwiftypeEngine::indexDocument($document)
- Creates a new document, or updates an existing, based on the primary
key. This function will use a transformer to make sure the primary key is transformed to just id
.
SwiftypeEngine::indesDocuments($document)
- Similar as the above but will take a list of models and chunk them
to 100 per request
SwiftypeEngine::deleteDocument($documentId)
- Removes a document.
SwiftypeEngine::deleteDocuments($documentIds)
- Takes an array of document ids and removes them.
SwiftypeEngine::listDocuments($page = 1, $pageSize = 100)
- Lists documents that belong to the engine, with pagination.
SwiftypeEngine::listAllDocumentsByPages($action, $page = 1, $pageSize = 100)
- Lists documents that belong to the engine,
will iterate through all pages and call your custom action.
SwiftypeEngine::purgeAllDocuments()
- Will remove all documents from Swiftype
IsSwiftypeDocument
is a trait available which hooks into the models saved
event hook. The following happens on
saved:
shouldSyncSwiftypeOnSave
is checked and must pass true to continuegetSwiftypeAttributes
is called to get the attributes to send to Swiftype
You should override these functions for business specific logic.
/**
* Should model changes be pushed to Swiftype. Excludes deleting
* @return bool
*/
public function shouldSyncSwiftypeOnSave()
{
// by default all model changes are pushed to swiftype
return true;
}
/**
* Get the mapped attribute values for Swiftype
* @return mixed|null
*/
public function getSwiftypeAttributes()
{
// Document transformer is the default transformer, feel free to implement your own
return transform($this, new DocumentTransformer());
}
Currently only jobs directly related to the Eloquent Model events are created. These can be used to queue the data sync.
DeleteDocument($documentId)
- Delete a particular document, takes the document idIndexDocument($document)
- Pushes the individual document. Takes the mapped documentSyncDocuments
- Iterates through all documents in Swiftype and local DB to find documents out of sync and eithers adds or removes them. This uses theswiftype.sync_models
configuration
$ composer test
If you discover any security related issues, please email harlan@harlanzw.com instead of using the issue tracker.