novaway/elasticsearch-client

[已停用] 一个轻量级的Elasticsearch PHP客户端

6.5.2 2019-03-20 15:38 UTC

This package is auto-updated.

Last update: 2024-09-08 20:37:24 UTC


README

注意:该项目已停用,转而使用ElasticsearchBundle,因为该项目试图做elastica已经做得很好的事情

一个轻量级的PHP 7.0+客户端,提供Elasticsearch-PHP的功能扩展

兼容性

此分支经过测试,与ElasticSearch 6.*兼容

ElasticSearch 5.*的兼容性得到支持,应该可以正常工作,但需要谨慎对待。

安装

使用composer安装

$ composer require novaway/elasticsearch-client

用法

创建索引

使用此库的第一步是实例化一个索引。这将是客户端的核心。

$index = new \Novaway\ElasticsearchClient\Index(
	['127.0.0.1:9200'],  	# elasticsearch hosts
	'main_index',				# index name
	[
        'settings' => [
            'number_of_shards' => 3,
            'number_of_replicas' => 2
        ],
        'mappings' => [
            'my_type' => [
                '_source' => [
                    'enabled' => true
                ],
                'properties' => [
                    'first_name' => [
                        'type' => 'string',
                        'analyzer' => 'standard'
                    ],
                    'age' => [
                        'type' => 'integer'
                    ]
                ]
            ]
        ]
    ]    
);

索引对象

为了进行搜索,对象应作为序列化版本索引。为了索引,对象应实现\Novaway\ElasticsearchClient\Indexable接口。

默认情况下,对象使用Elasticsearch-PHP的SmartSerializer进行序列化,但您可以选择使用自定义序列化器

$objectIndexer = new \Novaway\ElasticsearchClient\ObjectIndexer($index);
$objectIndexer->index($object, 'my_type');

从索引中删除对象

要从索引中删除对象,过程仍然是

$objectIndexer = new \Novaway\ElasticsearchClient\ObjectIndexer($index);
$objectIndexer->remove($object, 'my_type');

// Alternatively, you can remove an indexed object knowing only it's ID.
$objectIndexer->removeById($objectId, 'my_type');

搜索索引

基本匹配查询

首先创建一个QueryExecutor

$queryExecutor = new \Novaway\ElasticsearchClient\QueryExecutor($index);

使用QueryBuilder构建查询并执行它。

use Novaway\ElasticsearchClient\Query\CombiningFactor;

$queryBody = QueryBuilder::createNew()
					->match('first_name', 'John', CombiningFactor::MUST)
					->getQueryBody()
;
$queryExecutor->execute($queryBody, 'my_type');

QueryBuilder允许您定义搜索结果的限制和偏移量,并选择要显示的最小分数。

const MIN_SCORE = 0.4;
const OFFSET = 0;
const LIMIT = 10;

$queryBuilder = QueryBuilder::createNew(0, 10, 0.3);

高级查询

此客户端提供了几种方法来改进查询

  • 过滤(缺少文档)
  • 聚合
  • 结果格式化(缺少文档)

清除索引

出于某种原因,您可能想要清除索引。`reload`方法会删除并重新创建索引。

$index->reload();

热插拔

有时您可能需要重新索引所有数据。

可以使用热插拔机制在不中断服务的情况下完成此操作

$index->hotswapToTmp();
// at that point, all your search request will go to the tmp index, and your create/delete will go to the main index
// when your are done reindexing your data, simply call 
$index->hotswapToMain()

与Symfony的推荐用法

如果您在一个symfony项目中使用此库,我们建议将其作为服务使用。

# services.yml
parameters:
    myapp.search.myindex.config:
        settings:
            number_of_shards : 1
            number_of_replicas : 1
        mappings:
            my_type:
                _source : { enabled : true }
                properties:
                    first_name:
                        type: string
                        analyzer: standard
                    age:
                        type: integer
                        
services:
    myapp.search.index:
        class: Novaway\ElasticsearchClient\Index
        arguments:
            - ['127.0.0.1:9200'] #define it in the parameter.yml file
            - 'myapp_myindex_%kernel.environment%'
            - 'myapp.search.myindex.config'

    myapp.search.object_indexer:
        class: Novaway\ElasticsearchClient\ObjectIndexer
        arguments:
            - '@myapp.search.index'

    myapp.search.query_executor:
        class: Novaway\ElasticsearchClient\QueryExecutor
        arguments:
            - '@myapp.search.index'

然后您只需与myapp.search.object_indexermyapp.search.query_executor服务一起工作。

测试

提供了一个基于使用docker化的Elasticsearch版本的测试环境。

测试使用Atoum框架进行单元测试,以及Behat框架进行行为测试。

Makefile提供了一些有用的命令用于测试,因此您可以运行完整的测试套件,只需运行

$ make test

许可

此库在MIT许可下发布