2

聚合原始查询

FT.AGGREGATE indexName "@geofield:[-83.81373 34.3755452645611 20 mi]" LOAD 1 @geofield APPLY "@cc_sum * ( 20 - (geodistance(@geofield, -83.81373, 34.3755452645611)) / 20)" as ccSumCalcValue APPLY 1 as test GROUPBY 1 @test REDUCE SUM 1 @ccSumCalcValue as weightedSum

使用“MacFJA/php-redisearch”聚合查询

$query = '@geofield:[-83.81373 34.3755452645611 20 mi]';
 $resultAggregate = $aggregate
    ->withIndexName('indexName ')
    ->withLoad(['geofield', 'cc_sum', 'if_fat'])
    ->withQuery($query)
    ->withApplies(['@cc_sum * ( 20 - (geodistance(@geofield, -83.81373, 34.3755452645611)) / 20)' => 'ccSumCalcValue'])
    ->addGroupBy(['ccSumCalcValue'], [])
    ->execute();

我无法使用此库从原始聚合查询中执行以下命令

APPLY 1 as test GROUPBY 1 @test REDUCE SUM 1 @ccSumCalcValue as weightedSum

有人可以帮我用这个库做这个命令吗

4

1 回答 1

1

复制自https://github.com/MacFJA/php-redisearch/issues/21#issuecomment-965615182


这里的代码与您的原始查询具有相同的输出(指令顺序不完全相同):

$aggregate
    ->withIndexName('indexName ')
    ->withLoad(['@geofield'])
    ->withQuery($query)
    ->withApplies(['@cc_sum * ( 20 - (geodistance(@geofield, -83.81373, 34.3755452645611)) / 20)' => 'ccSumCalcValue', '1 ' => 'test'])
    ->addGroupBy(['test'], [MacFJA\RediSearch\Aggregate\Reducer::sum('ccSumCalcValue', 'weightedSum')]);

APPLY 确实存在一个小问题,1 as test因为 applier ( 1) 的值不被视为字符串,但是有一个额外的空格,该值被强制为字符串

于 2021-11-10T18:23:15.233 回答