Download the PHP package bidzm/mysticquent without Composer
On this page you can find all versions of the php package bidzm/mysticquent. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download bidzm/mysticquent
More information about bidzm/mysticquent
Files in bidzm/mysticquent
Package mysticquent
Short Description Mysticquent is an Elasticsearch ODM and mapper for Laravel. It is inspired from sleimanx2/plastic and searchkick
License MIT
Homepage https://github.com/abidnurulhakim/mysticquent
Informations about the package mysticquent
Mysticquent is an Elasticsearch ODM and mapper for Laravel. It renders the developer experience more enjoyable while using Elasticsearch, by providing a fluent syntax for mapping, querying, and storing eloquent models. This package inspired from sleimanx2/plastic and searchkick
This package is still under active development and may change.
Installing Mysticquent
Then we need to add the plastic service provider to config/app.php
under the providers key:
Finally we need to run:
This will create a config file at config/mysticquent.php
.
Usage
- Defining Searchable Models
- Storing Model Content
- Searching
- Aggregation
- Suggestions
- Mappings
- Access The Client
[Defining Searchable Models]()
To get started, enable searching capabilities in your model by adding the Mysticquent\Searchable
trait:
Defining what data to store.
By default, Mysticquent will store all visible properties of your model.
In addition, Mysticquent provides you to manually specify which data should be stored in Elasticsearch.
Providing a buildDocument method
Custom elastic type name
By the default Mysticquent will use class name of model as document type. You can customize it by adding a $documentType
property to your model:
Custom elastic index name
By the default Mysticquent will use the model table name as index. You can customize in which index your model data will be stored by setting the $documentIndex
property to your model:
[Storing Model Content]()
Mysticquent automatically syncs model data with elastic when you save or delete your model from our SQL DB, however this feature can be disabled by adding public $syncDocument = false
to your model.
Its important to note that manual document update should be performed in multiple scenarios:
1 - When you perform a bulk update or delete, no Eloquent event is triggered, therefore the document data won't be synced.
2 - Mysticquent doesn't listen to related models events (yet), so when you update a related model's content you should consider updating the parent document.
Saving a document
Partial updating a document
Deleting a document
Saving documents in bulk
Deleting documents in bulk
[Searching Model Content]()
Plastic provides a fluent syntax to query Elasticsearch which leads to compact readable code. Lets dig into it:
To get the raw DSL query that will be executed you can call toDSL()
:
Pagination
You can still access the result object after pagination using the result method:
Bool Query
Nested Query
Check out this documentation of supported search queries within Plastic and how to apply unsupported queries.
Change index on the fly
To switch to a different index for a single query, simply use the index
method.
[Aggregation]()
Check out this documentation of supported aggregations within plastic and how to apply unsupported aggregations.
[Suggestions]()
The suggestions query builder can also be accessed directly from the model as well:
[Model Mapping]()
Mappings are an important aspect of Elasticsearch. You can compare them to indexing in SQL databases. Mapping your models yields better and more efficient search results, and allows us to use some special query functions like nested fields and suggestions.
Generate a Model Mapping
The new mapping will be placed in your database/mappings
directory.
Mapping Structure
A mapping class contains a single method map
. The map method is used to map the given model fields.
Within the map
method you may use the Plastic Map builder to expressively create field maps. For example, let's look at a sample mapping that creates a Tag model map:
To learn about all of the methods available on the Map builder, check out this documentation.
Run Mappings
Running the created mappings can be done using the Artisan console command:
Updating Mappings
If your update consists only of adding a new field mapping you can always update our model map with your new field and run:
The mapping for existing fields cannot be updated or deleted, so you'll need to use one of following techniques to update existing fields.
1 - Create a new index
You can always create a new Elasticsearch index and re-run the mappings. After running the mappings you can use the bulkSave
method to sync your SQL data with Elasticsearch.
2 - Using aliases
Its recommended to create your Elasticsearch index with an alias to ease the process of updating your model mappings with zero downtime. To learn more check out:
https://www.elastic.co/blog/changing-mapping-with-zero-downtime
[Access The Client]()
You can access the Elasticsearch client to manage your indices and aliases as follows:
More about the official elastic client : https://github.com/elastic/elasticsearch-php
Contributing
Thank you for contributing, The contribution guide can be found Here.
License
Plastic is open-sourced software licensed under the MIT license.
To Do
Search Query Builder
- [ ] implement Boosting query
- [ ] implement ConstantScore query
- [ ] implement DisMaxQuery query
- [ ] implement MoreLikeThis query (with raw eloquent models)
- [ ] implement GeoShape query
Aggregation Query Builder
- [ ] implement Nested aggregation
- [ ] implement ExtendedStats aggregation
- [ ] implement TopHits aggregation
Mapping
- [ ] Find a seamless way to update field mappings with zero downtime with aliases
General
- [ ] Better query builder documentation
All versions of mysticquent with dependencies
elasticsearch/elasticsearch Version ~5.3.0
ongr/elasticsearch-dsl Version 5.*
illuminate/container Version 5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*
illuminate/contracts Version 5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*
illuminate/console Version 5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*
illuminate/pagination Version 5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*
illuminate/support Version 5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*
illuminate/database Version 5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*