novaway / elasticsearch-client
[已停用] 一个轻量级的Elasticsearch PHP客户端
Requires
- php: ^7.0
- elasticsearch/elasticsearch: ^5.2 || ^6.0
- myclabs/php-enum: ^1.0
- symfony/dependency-injection: ^3.0 || ^4.0
Requires (Dev)
- atoum/atoum: ^3.0
- atoum/stubs: ^2.5
- behat/behat: ^3.3
- guzzlehttp/ringphp: ^1.1
- symfony/serializer: ^3.3
- symfony/var-dumper: ^3.3
- symfony/yaml: ^3.3
- webmozart/assert: ^1.0
Suggests
- symfony/serializer: Is required when working with the SymfonySerializerBridge
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_indexer
和myapp.search.query_executor
服务一起工作。
测试
提供了一个基于使用docker化的Elasticsearch版本的测试环境。
测试使用Atoum框架进行单元测试,以及Behat框架进行行为测试。
Makefile
提供了一些有用的命令用于测试,因此您可以运行完整的测试套件,只需运行
$ make test
许可
此库在MIT许可下发布