edwinhoksberg / elasticsearch-query-builder
使用流畅的PHP API构建并执行Elasticsearch搜索查询
Requires
- php: ^8.0
Requires (Dev)
- elasticsearch/elasticsearch: ^7.0
- friendsofphp/php-cs-fixer: ^3.41
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-22 22:26:28 UTC
README
此包是一个轻量级的ElasticSearch查询构建器。它专门为我们的elasticsearch-search-string-parser构建,因此覆盖了大多数用例,但可能缺少某些功能。如果您需要任何特定功能,我们始终欢迎提交PR!
use EdwinHoksberg\ElasticsearchQueryBuilder\Aggregations\MaxAggregation; use EdwinHoksberg\ElasticsearchQueryBuilder\Builder; use EdwinHoksberg\ElasticsearchQueryBuilder\Queries\MatchQuery; $client = Elastic\Elasticsearch\ClientBuilder::create()->build(); $companies = (new Builder($client)) ->index('companies') ->addQuery(MatchQuery::create('name', 'spatie', fuzziness: 3)) ->addAggregation(MaxAggregation::create('score')) ->search();
安装
您可以通过composer安装此包
composer require edwinhoksberg/elasticsearch-query-builder
基本用法
您真正需要与之交互的类是 EdwinHoksberg\ElasticsearchQueryBuilder\Builder
类。它需要一个构造函数中传递的 \Elastic\Elasticsearch\Client
。查看ElasticSearch SDK文档以了解如何连接到您的ElasticSearch集群。
Builder
类包含一些用于 添加查询、聚合、排序、字段 和一些用于 分页 的额外方法。您可以在下面阅读有关这些方法的更多信息。一旦完全构建查询,您可以使用 $builder->search()
执行查询或使用 $builder->getPayload()
获取ElasticSearch的原始有效负载。
use EdwinHoksberg\ElasticsearchQueryBuilder\Queries\RangeQuery; use EdwinHoksberg\ElasticsearchQueryBuilder\Builder; $client = Elastic\Elasticsearch\ClientBuilder::create()->build(); $builder = new Builder($client); $builder->addQuery(RangeQuery::create('age')->gte(18)); $results = $builder->search(); // raw response from ElasticSearch
添加查询
您可以使用 $builder->addQuery()
方法将任何可用的 Query
类型添加到构建器中。可用的查询类型可以在下面或在此存储库的 src/Queries
目录中找到。每个 Query
都有一个静态的 create()
方法来传递其最重要的参数。
添加排序
Builder
(以及一些聚合)有一个 addSort()
方法,该方法接受一个用于对结果进行排序的 Sort
实例。您可以在ElasticSearch文档中了解更多有关排序的信息。
use EdwinHoksberg\ElasticsearchQueryBuilder\Sorts\Sort; $builder ->addSort(Sort::create('age', Sort::DESC)) ->addSort( Sort::create('score', Sort::ASC) ->unmappedType('long') ->missing(0) );
检索特定字段
您可以使用 fields()
方法请求结果文档中的特定字段,而不返回整个 _source
条目。您可以在ElasticSearch文档中了解更多有关字段参数的详细信息。
$builder->fields('user.id', 'http.*.status');
分页
最后,Builder
还具有相应的ElasticSearch搜索参数的 size()
和 from()
方法。这些可以用于构建分页搜索。查看以下示例以获得大致了解
use EdwinHoksberg\ElasticsearchQueryBuilder\Builder; $pageSize = 100; $pageNumber = $_GET['page'] ?? 1; $pageResults = (new Builder(Elastic\Elasticsearch\ClientBuilder::create())) ->size($pageSize) ->from(($pageNumber - 1) * $pageSize) ->search();
测试
composer test
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。