小编Gre*_*gOs的帖子

Foselasticabundle:如何在查询中向FunctionScore添加脚本?弹性

我需要在我的查询中添加一个functionScore,以定义与结果相关的特定内容。

这是我的工作代码:

 $query      = new BoolQuery();
 $filters    = new BoolFilter();

 $query = new Query\Term();

 $query->setTerm($field, $value);
 $query->addMust($query);
 $query = new Query\Filtered($query, $filters);

 $finalQuery = new Query($query);
 $finalQuery->addSort(array('maxCapacity' => array('order' => 'asc')));

 $type->search($finalQuery, array('from' => (int)$from, 'size' => (int)$limit));
Run Code Online (Sandbox Code Playgroud)

而且我需要在查询中添加类似的内容,但是我不知道该怎么做:

 $script = new Script("doc['pricehour'].value * 0.2 + doc['priceDay'].value * 0.4");
 $score = new \Elastica\Query\FunctionScore();
 $score->addScriptScoreFunction($script);
Run Code Online (Sandbox Code Playgroud)

我的方向正确吗?

ps:由于我使用了排序,所以我在结果集中的_score为空,关于如何使用FosElasticaBundle重新激活它的任何想法?

/ ******编辑******* /

我终于找到了解决方案。Elastica中的所有内容都与包装查询有关。

我现在可以执行如下的FunctionScore查询:

$scoreQuery = new Query\FunctionScore($query);
$finalQuery = new Query($scoreQuery);

$script = new Script("doc['pricehour'].value * 0.2 + doc['priceDay'].value * 0.4");
$scoreQuery->addScriptScoreFunction($script); …
Run Code Online (Sandbox Code Playgroud)

symfony elasticsearch elastica foselasticabundle

5
推荐指数
1
解决办法
692
查看次数