GitHub - matchish/laravel-scout-elasticsearch: Full power of ElasticSearch in yo...
source link: https://github.com/matchish/laravel-scout-elasticsearch
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
The package provides the perfect starting point to integrate ElasticSearch into your Laravel application. It is carefully crafted to simplify the usage of ElasticSearch within the Laravel Framework.
It’s built on top of the latest release of Laravel Scout, the official Laravel search package. Using this package, you are free to take advantage of all of Laravel Scout’s great features, and at the same time leverage the complete set of ElasticSearch’s search experience.
If you need any help, stack overflow is the preffered and recommended way to ask support questions.
? Features
- Zero downtime reimport - it’s a breeze to import data in production.
- Bulk indexing.
- A fully configurable mapping for each model.
- Full power of ElasticSearch in your queries
⚠️ Requirements
- PHP version >= 7.1.3
- Laravel Framework version >= 5.6
- Elasticsearch version >= 6
? Installation
Use composer to install the package:
composer require matchish/laravel-scout-elasticsearch
Set env variables
SCOUT_DRIVER=Matchish\ScoutElasticSearch\Engines\ElasticSearchEngine
Config \ElasticSearch\Client
in your app service provider or just set ELASTICSEARCH_HOST
env variable
ELASTICSEARCH_HOST=host:port
? Usage
Note: This package adds functionalities to Laravel Scout, and for this reason, we encourage you to read the Scout documentation first. Documentation for Scout can be found on the Laravel website.
Index settings and mappings
It is very important to define the mapping when we create an index — an inappropriate preliminary definition and mapping may result in the wrong search results.
To define mappings or settings for index, set config with right value.
For example if method searchableAs
return
products
string
Config key for mappings should beelasticsearch.indices.mappings.products
Or you you can specify default mappings with config key
elasticsearch.indices.mappings.default
Same way you can define settings
For index products
it will beelasticsearch.indices.settigs.products
And for default settingselasticsearch.indices.settigs.default
Zero downtime reimport
While working in production, to keep your existing search experience available while reimporting your data, you also can use scout:import
Artisan command:
php artisan scout:import
The command create new temporary index, import all models to it, and then switch to the index and remove old index.
Search
To be fully compatible with original scout package, this package don't add new methods.
So how we can build complex queries?
There is two ways.
By default when you pass query to search
method the engine builds query_string query, so you can build queries like this
Product::search('title:this OR description:this) AND (title:that OR description:that')`
If it's not enough in your case you can pass callback to query builder
$results = Product::search('zonga', function($client, $body) { $minPriceAggregation = new MinAggregation('min_price'); $minPriceAggregation->setField('price'); $maxPriceAggregation = new MaxAggregation('max_price'); $maxPriceAggregation->setField('price'); $brandTermAggregation = new TermsAggregation('brand'); $brandTermAggregation->setField('brand'); $body->addAggregation($minPriceAggregation); $body->addAggregation($brandTermAggregation); $client->search(['index' => 'products', 'body' => $body->toArray()]); })->raw();
$client
is \ElasticSearch\Client
object from elasticsearch/elasticsearch
package
And $body
is ONGR\ElasticsearchDSL\Search
from ongr/elasticsearch-dsl package
Don't forget ⭐️ the package if you like it. ?
? License
Scout ElasticSearch is an open-sourced software licensed under the MIT license.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK