function search_api_glossary_search_api_solr_documents_alter in Search API AZ Glossary 7.3
Same name and namespace in other branches
- 7 search_api_glossary.module \search_api_glossary_search_api_solr_documents_alter()
- 7.2 search_api_glossary.module \search_api_glossary_search_api_solr_documents_alter()
Alter Solr documents before they are sent to Solr for indexing.
Parameters
array $documents: An array of SearchApiSolrDocument objects ready to be indexed, generated from $items array.
SearchApiIndex $index: The search index for which items are being indexed.
array $items: An array of items being indexed.
File
- ./
search_api_glossary.module, line 102 - Search api glossary module file.
Code
function search_api_glossary_search_api_solr_documents_alter(array &$documents, SearchApiIndex $index, array $items) {
$searcher = 'search_api@' . $index->machine_name;
$fields = _search_api_glossary_get_field();
$field_names = $index
->server()
->getFieldNames($index);
foreach ($fields as $field) {
if ($facet = facetapi_facet_load($field, $searcher)) {
$adapter = facetapi_adapter_load($searcher);
$facet_settings = $adapter
->getFacetSettingsGlobal($facet);
$field_key = $facet['field'] . '_field';
if (!empty($facet_settings->settings[$field_key])) {
$source_field_key = $facet_settings->settings[$field_key];
foreach ($documents as $document) {
$source_field = $document
->getField($source_field_key);
// is source field a "string" or "text"?
if (0 === strpos($source_field['name'], 'tm_')) {
// $source_field['value'] is an array
$source_field_value = $source_field['value'][0];
}
elseif (0 === strpos($source_field['name'], 'ss_')) {
// $source_field['value'] is an string
$source_field_value = $source_field['value'];
}
if (is_string($source_field_value) && drupal_strlen($source_field_value) > 0) {
// get the first letter of $source_field_value, eg CAT = C
$first_letter = strtoupper($source_field_value[0]);
// Group the $first_letter into its container bin.
$value = search_api_glossary_getter_helper($first_letter);
// Set the values in Solr
$document
->setField($field_names[$field], $value);
}
}
}
}
}
}