Foselasticabundle : How to add a script to FunctionScore in a query ? Elastica
Asked Answered
D

1

7

I need to add a functionScore to my query to define a specific relevance for my results.

Here is my working code :

 $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));

And I need to add something like this to my query, but I can't figure out how to do :

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

Am I in the right direction?

P.S. My _score in the result set is null since I used the sort, any idea on how to reactivated it with FosElasticaBundle?

Derrickderriey answered 24/6, 2016 at 14:55 Comment(0)
C
0

Solution moved from @GregOs's question post.

I finally found the solution. Everything in Elastica is about wrapping the queries.

I now can perform a FunctionScore query like this :

$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.
Closet answered 24/6, 2016 at 14:56 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.