function apachesolr_fields_default_indexing_callback in Apache Solr Search 8
Same name and namespace in other branches
- 6.3 apachesolr.index.inc \apachesolr_fields_default_indexing_callback()
- 7 apachesolr.index.inc \apachesolr_fields_default_indexing_callback()
Callback that converts list module field into an array For every multivalued value we also add a single value to be able to use the stats
Parameters
object $entity:
string $field_name:
string $index_key:
array $field_info:
Return value
array $fields
3 string references to 'apachesolr_fields_default_indexing_callback'
- field_apachesolr_field_mappings in ./apachesolr.module 
- Implements hook_apachesolr_field_mappings().
- hook_apachesolr_field_mappings in ./apachesolr.api.php 
- Add index mappings for Field API types. The default mappings array handles just list fields and taxonomy term reference fields, such as:
- hook_apachesolr_field_mappings_alter in ./apachesolr.api.php 
- Alter hook for apachesolr_field_mappings().
File
- ./apachesolr.index.inc, line 1095 
- Functions related to Apache Solr indexing operations.
Code
function apachesolr_fields_default_indexing_callback($entity, $field_name, $index_key, array $field_info) {
  $fields = array();
  $numeric = TRUE;
  if (!empty($entity->{$field_name})) {
    $field = $entity->{$field_name};
    list($lang, $values) = each($field);
    switch ($field_info['index_type']) {
      case 'integer':
      case 'half-int':
      case 'sint':
      case 'tint':
      case 'thalf-int':
      case 'boolean':
        $function = 'intval';
        break;
      case 'float':
      case 'double':
      case 'sfloat':
      case 'sdouble':
      case 'tfloat':
      case 'tdouble':
        $function = 'apachesolr_floatval';
        break;
      default:
        $numeric = FALSE;
        $function = 'apachesolr_clean_text';
    }
    for ($i = 0; $i < count($values); $i++) {
      $fields[] = array(
        'key' => $index_key,
        'value' => $function($values[$i]['value']),
      );
    }
    // Also store the first value of the field in a singular index for multi value fields
    if ($field_info['multiple'] && $numeric && !empty($values[0])) {
      $singular_field_info = $field_info;
      $singular_field_info['multiple'] = FALSE;
      $single_key = apachesolr_index_key($singular_field_info);
      $fields[] = array(
        'key' => $single_key,
        'value' => $function($values[0]['value']),
      );
    }
  }
  return $fields;
}