public function NumberFieldBoost::preprocessIndexItems in Search API 8
Preprocesses search items for indexing.
Parameters
\Drupal\search_api\Item\ItemInterface[] $items: An array of items to be preprocessed for indexing.
Overrides ProcessorPluginBase::preprocessIndexItems
File
- src/
Plugin/ search_api/ processor/ NumberFieldBoost.php, line 112
Class
- NumberFieldBoost
- Adds a boost based on a number field value.
Namespace
Drupal\search_api\Plugin\search_api\processorCode
public function preprocessIndexItems(array $items) {
$boosts = $this->configuration['boosts'];
/** @var \Drupal\search_api\Item\ItemInterface $item */
foreach ($items as $item) {
foreach ($boosts as $field_id => $settings) {
if ($field = $item
->getField($field_id)) {
if ($values = $field
->getValues()) {
switch ($settings['aggregation']) {
case 'min':
$value = min($values);
break;
case 'avg':
$value = array_sum($values) / count($values);
break;
case 'sum':
$value = array_sum($values);
break;
case 'mul':
$value = array_product($values);
break;
case 'first':
$value = reset($values);
break;
case 'max':
default:
$value = max($values);
break;
}
if ($value) {
$item
->setBoost($item
->getBoost() * (double) $value * (double) $settings['boost_factor']);
}
}
}
}
}
}