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

时间:2016-06-24 14:55:51

标签: symfony elasticsearch elastica foselasticabundle

我需要在查询中添加一个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));

我需要在查询中添加这样的内容,但我无法弄清楚该怎么做:

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

我是朝着正确的方向吗?

Ps:我的结果集中的_score为null,因为我使用了排序,有关如何使用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);

$type->search($finalQuery, array('from' => (int)$from, 'size' => (int)$limit));

And I perform either the score, either the sort.

0 个答案:

没有答案