baka/elasticsearch

Baka Elasticsearch 组件

v1.0 2019-06-03 04:35 UTC

README

Phalcon Elastic Search 包,易于索引/查询具有关系的模型

目录

  1. 索引
    1. 创建
    2. 插入
  2. 搜索
  3. 测试

安装

  • "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