baka / elasticsearch
Baka Elasticsearch component
Installs: 2 210
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 6
Forks: 1
Open Issues: 4
Requires
- php: >=7.2
- ext-phalcon: >=3.0.0
- baka/database: ^0.5
- baka/http: ^0.5
- elasticsearch/elasticsearch: ^6.1
- monolog/monolog: ^1.16
- phalcon/incubator: ~3.3
- vlucas/phpdotenv: ^2.0
Requires (Dev)
- codeception/codeception: 2.4
- codeception/verify: *
- duncan3dc/fork-helper: ^2.2.0
This package is auto-updated.
Last update: 2025-01-29 06:07:27 UTC
README
Phalcon Elastic Search package to index / query model with relationship easily
Table of Contents
Installing
Packages:
"elasticsearch/elasticsearch": "~2.0@beta"
"baka/database": "dev-master"
"phalcon/incubator": "~3.0","
Add elastic configuration to config.php
#config.php 'namespace' => [ 'controller' => 'Project\Controllers', 'models' => 'Project\Models', ], 'elasticSearch' => [ 'hosts' => [getenv('ELASTIC_HOST')], //change to pass array ],
add queue to DI
#service.php $di->set('queue', function () use ($config) { //Connect to the queue $queue = new Phalcon\Queue\Beanstalk\Extended([ 'host' => $config->beanstalk->host, 'prefix' => $config->beanstalk->prefix, ]); return $queue; });
Indexing
To create a Index in Elastic search first you will need to configure a CLI project and extend it from IndexTasksBuilder
, after doing that just run the following command
php cli/app.php IndexBuilder createIndex ModelName 3
Where 4
is the normal of levels you want the relationships to index for example
Level 1
Class A
- Relation BelongsTo Class B
Level 2
Class A
- Relation BelongsTo Class B
- - Class B
- - - Relation HasMany Class C
Level 3
Class A
- Relation BelongsTo Class B
- - Class B
- - - Relation HasMany Class C
- - - - Class C
- - - - - Relation HasMany Class D
We can ignore a relationship if we specify on the options 'elasticSearch' => false
I wont recommend going beyond 4 levels if it not neede, it will use a lot of space.
If you get a error related to nestedLimit
, you can use a 4th param to specify the amount the index limit
php cli/app.php IndexBuilder createIndex ModelName 3 100
Indexing Queue
Now that you created a Index we need to index the data, for that your model will need to extend from \Baka\Elasticsearch\Model
. After every update | save we will send the information to a queue where the process will insert or update the info in elastic
<?php class Users extends \Baka\Elasticsearch\Model { }
Queue
php cli/app.php IndexBuilder queue ModelName
Example:
php cli/app.php IndexBuilder queue Users
Search
In order to simply searching en elastic search with elastic you most install this extension https://github.com/NLPchina/elasticsearch-sql
Now your search controller must use our trait
<?php /** * Search controller */ class SearchController extends BaseController { use \Baka\Elasticsearch\SearchTrait }
And Follow the same query structure has Baka Http
https://api.dev/v1/search/indexName?sort=id|asc&q=(is_deleted:0,relationship.type_id:1)&fields=id,first_name,last_name,relationship.name,relationship.relationshipb.name
Example
https://api.dev/v1/search/users?sort=first_name|asc&q=(is_deleted:0,users_statuses_id:,first_name:,last_name:)&fields=id,first_name,last_name,potentiality,classification,userssprograms.id,events_satisfaction,is_prospect,gifts.name,is_key_users,dob,companies.name,companies.companiesstatuses.name,companies.rnc,position
Testing
codecept run