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