crowdskout / es-search-builder
简化Elasticsearch搜索API和查询聚合结果解析
Requires
- php: >=5.6.6
- elasticsearch/elasticsearch: ~5.0
Requires (Dev)
- phpunit/phpunit: ~5.0
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/中看到一个自定义聚合结果生成器的示例。