我如何使用以下功能? (对于与函数分数查询相关的PHP中的elastica)
addScriptScoreFunction($ script,$ filter)
过滤器是否过滤掉结果或仅根据脚本获得通过过滤器的分数?得分效率如何?
我还可以在功能评分查询中添加多个脚本评分功能吗?
答案 0 :(得分:1)
$keyword = 'foo';
$fiels = 'name';
$inner_query = new Elastica\Query\Match();
$inner_query->setFieldQuery($field, $keyword);
// Wrap the function_score around the initial query
$scorefunction = new Elastica\Query\FunctionScore();
$scorefunction->setQuery($inner_query);
$scorefunction->setBoostMode('replace'); // Otherwise it will be multiplied with _score
// Make the custom score function: boost max 20% of initial _score, depending on popularity
$script = new Elastica\Script("_score + (doc['popularity'].value * 0.2 * _score)/100");
$scorefunction->addScriptScoreFunction($script);
// Last step: put that all in Elastica\Query and execute with Elastica\Search
有一些可能的陷阱:
没有->setBoostMode('replace');
原始_score将与脚本的结果相乘。在我的情况下,需要添加,因此'替换'。
看来各个部门都是四舍五入的。由于我在公式中使用的受欢迎程度总是在1到100之间,因此单独使用人气/ 100总是向下舍入到0并且公式似乎没有效果。