ElasticSearch中的自定义评分

时间:2015-03-20 04:11:57

标签: elasticsearch elastica

我如何使用以下功能? (对于与函数分数查询相关的PHP中的elastica)

addScriptScoreFunction($ script,$ filter)

过滤器是否过滤掉结果或仅根据脚本获得通过过滤器的分数?得分效率如何?

我还可以在功能评分查询中添加多个脚本评分功能吗?

1 个答案:

答案 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并且公式似乎没有效果。