baka / elasticsearch
Baka Elasticsearch 组件
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: 2024-09-29 05:08:21 UTC
README
Phalcon Elastic Search 包,易于索引/查询具有关系的模型
目录
安装
包
"elasticsearch/elasticsearch": "~2.0@beta"
"baka/database": "dev-master"
"phalcon/incubator": "~3.0","
将弹性配置添加到 config.php
#config.php 'namespace' => [ 'controller' => 'Project\Controllers', 'models' => 'Project\Models', ], 'elasticSearch' => [ 'hosts' => [getenv('ELASTIC_HOST')], //change to pass array ],
将队列添加到 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; });
索引
要在 Elastic search 中创建索引,首先需要配置一个 CLI 项目并从 IndexTasksBuilder
扩展它,完成这些操作后,只需运行以下命令
php cli/app.php IndexBuilder createIndex 模型名称 3
其中 4
是要索引的关系的级别,例如
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
如果我们在选项中指定 'elasticSearch' => false
,我们可以忽略一个关系
如果不必要,不建议超过 4 个级别,它将占用大量空间。
如果您收到与 nestedLimit
相关的错误,您可以使用第四个参数指定索引限制的数量
php cli/app.php IndexBuilder createIndex 模型名称 3 100
索引队列
现在我们已经创建了一个索引,我们需要索引数据,为此,您的模型需要扩展 \Baka\Elasticsearch\Model
。在每次更新|保存之后,我们将信息发送到队列中,该进程将在弹性中插入或更新信息
<?php class Users extends \Baka\Elasticsearch\Model { }
队列
php cli/app.php IndexBuilder queue 模型名称
示例:php cli/app.php IndexBuilder queue Users
搜索
为了使用 elastic 简单地在 elastic search 中搜索,您必须安装此扩展 https://github.com/NLPchina/elasticsearch-sql
现在您的搜索控制器必须使用我们的 trait
<?php /** * Search controller */ class SearchController extends BaseController { use \Baka\Elasticsearch\SearchTrait }
并遵循 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
示例
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
测试
codecept run