crowdskout/es-search-builder

简化Elasticsearch搜索API和查询聚合结果解析

v5.0.2 2017-09-12 14:52 UTC

This package is not auto-updated.

Last update: 2024-09-29 04:03:29 UTC


README

此包提供简化API和结果解析,用于Elasticsearch搜索查询和聚合。它基于此处的官方elasticsearch-php库:https://github.com/elastic/elasticsearch-php

快速示例 - 查询API

    $query = Query::terms('intField', [1, 2, 3, 4, 5, 6])
    print_r($query);

查询API提供更简单、更简洁的查询生成。

    Array
    (
        [terms] => Array
            (
                [intField] => Array
                    (
                        [0] => 1
                        [1] => 2
                        [2] => 3
                        [3] => 4
                        [4] => 5
                        [5] => 6
                    )
    
            )
    
    )

快速示例 - 聚合构建器API

    use Crowdskout\EsSearchBuilder\Agg as AggBuilder;
    
    $aggBuilder = new AggBuilder();
    
    $agg = $aggBuilder->nested('parentField', $aggBuilder->terms('parentField.subField'));
    $aggQuery = $agg->generateQuery();

    print_r($aggQuery);

聚合可以嵌套在一起

Array
(
    [parentField_nested_agg] => Array
        (
            [nested] => Array
                (
                    [path] => parentField
                )

            [aggs] => Array
                (
                    [parentField.subField_terms_agg] => Array
                        (
                            [terms] => Array
                                (
                                    [field] => parentField.subField
                                )

                        )

                )

        )

)

使用agg对象解析来自Elasticsearch的结果

    // ... (code from above)
    
    // Aggregation results from Elasticsearch
    $elasticResult = [
         'parentField_nested_agg' => [
             'doc_count' => 5,
             'parentField.subField_terms_agg' => [
                 'buckets' => [
                     [
                         'key' => 'subFieldValue1',
                         'doc_count' => 3
                     ],
                     [
                         'key' => 'subFieldValue2',
                         'doc_count' => 2
                     ]
                 ]
             ]
         ]
     ];

    $parsedResult = $agg->generateResults($elasticResult);
    print_r($parsedResult);
    Array
    (
        [Total] => 5
        [options] => Array
            (
                [subFieldValue1] => 3
                [subFieldValue2] => 2
            )
    
    )

使用Composer安装

如果您没有Composer,请安装它 - https://getcomposer.org/

从终端将此包添加到您的项目中。

composer require crowdskout/es-search-builder

如果您的项目尚未设置自动加载Composer库,您可以在bootstrap文件或脚本的最顶部放置此内容

    use Crowdskout\EsSearchBuilder\Agg as AggBuilder;
    use Crowdskout\EsSearchBuilder\Query;

    require 'vendor/autoload.php';

    // Query
    $query = Query::terms('intField', [1, 2, 3, 4, 5, 6])
    
    // Agg
    $aggBuilder = new AggBuilder();
        
    $agg = $aggBuilder->nested('parentField', $aggBuilder->terms('parentField.subField'));
    $aggQuery = $agg->generateQuery();

与elasticsearch-php一起使用

此库创建简单数组,用于传递给Elasticsearch搜索查询的body部分。您可以将搜索结果的聚合部分传递到聚合的generateQuery函数中。

    use Crowdskout\EsSearchBuilder\Agg as AggBuilder;
    use Crowdskout\EsSearchBuilder\Query;
    use Elasticsearch\ClientBuilder;
    
    // Build a query
    $query = Query::terms('intField', [1, 2, 3, 4, 5, 6])
    
    // Build an aggregation
    $aggBuilder = new AggBuilder();
    $agg = $aggBuilder->nested('parentField', $aggBuilder->terms('parentField.subField'));
    
    // Initialize the Elasticsearch client
    $client = ClientBuilder::create()->build()
    
    // Run the search query
    $params = [
            'index' => 'my_index',
            'type' => 'my_type',
            'body' => [
                'query' => $query,
                'aggs' => $agg->generateQuery()
            ]
        ];
    $response = $client->search($params);
    
    // Parse the results
    $parsedResult = $agg->generateResults($response['aggregations']);

此库目前不支持所有查询和聚合

当前支持的查询在此处:https://github.com/crowdskout/es-search-builder/blob/master/src/Query.php

当前支持的聚合在此处:https://github.com/crowdskout/es-search-builder/blob/master/src/AggQuery.php

如果您想看到支持的查询或聚合,请提出问题。您也可以尝试编写它并打开一个pull请求 :)

其他示例

您可以在tests/目录中查看其他更复杂的查询和聚合示例。您还可以在tests/AggGeneratorTest.php/中看到一个自定义聚合结果生成器的示例。