elasticsearch 光纤束:如何在查询中向FunctionScore添加脚本?Elastica

kiayqfof  于 2023-01-29  发布在  ElasticSearch
关注(0)|答案(1)|浏览(121)

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

我走的方向对吗?
P.S.由于我使用了排序,结果集中的My _score为空,有什么想法可以用FosElasticaBundle重新激活它吗?

4dc9hkyq

4dc9hkyq1#

Solution moved来自@GregOs的问题帖子。
我终于找到了解决办法。在Elastica中的一切都是关于 Package 查询。
现在我可以执行如下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.

相关问题