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