edwinhoksberg/elasticsearch-query-builder

使用流畅的PHP API构建并执行Elasticsearch搜索查询

7.0.0 2023-12-22 20:56 UTC

This package is auto-updated.

Last update: 2024-09-22 22:26:28 UTC


README

Latest Version on Packagist Tests Total Downloads

此包是一个轻量级的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)。有关更多信息,请参阅许可证文件