2015-03-20 2 views
0

Как использовать следующую функцию? (Для эластика в PHP с относительно Функцией Score запрос)Пользовательский скоринг в ElasticSearch

addScriptScoreFunction ($ скрипта, $ фильтр)

фильтром ли отфильтровать результаты или только оценка на основе сценария для тех, которые проходят фильтр? Насколько эффективна оценка?

Также я могу добавить более одной функции оценки скрипта для выполнения запроса оценки?

ответ

0
$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, и формула, казалось, не имела никакого эффекта.

Смежные вопросы