function elgg_solr_add_tags($doc, $entity) { if (!elgg_instanceof($entity)) { return $doc; } // store tags the old way - lumped together in $doc->tags as $name . '%%' . $value' $doc->tags = elgg_solr_get_tags_array($entity); // also store them separately with magick fields // store in different field types for different search types $valid_tag_names = elgg_get_registered_tag_metadata_names(); if ($valid_tag_names && is_array($valid_tag_names)) { foreach ($valid_tag_names as $tagname) { $tags = $entity->{$tagname}; if ($tags && !is_array($tags)) { $tags = array($tags); } $name = 'tag_' . $tagname . '_ss'; // multivalued string $doc->{$name} = $tags; } } return $doc; }
function plugin_index($h, $t, $doc, $p) { if (!$doc) { return $doc; // something else prevented this index } if (!elgg_instanceof($p['entity'], 'object', 'plugin_project')) { return $doc; } $entity = $p['entity']; // add brief description to the full description $description = trim($entity->summary . ' ' . $entity->description); $doc->description = $description; // use generic fields for some filter queries // eg. $releases = $entity->getReleases(array('limit' => false)); $elgg_versions = array(); if ($releases) { foreach ($releases as $release) { if (is_array($release->elgg_version)) { foreach ($release->elgg_version as $version) { $elgg_versions[] = $version; } } else { $elgg_versions[] = $release->elgg_version; } } } $screenshots = $entity->getScreenshots(); $doc->version_ss = array_unique($elgg_versions); $doc->plugin_type_s = $entity->plugin_type; $doc->plugincat_s = $entity->plugincat; $doc->license_s = $entity->license; $doc->screenshots_i = $screenshots ? 1 : 0; // store category with the tags $categoryname = 'plugincat'; $tag_registered = false; $md = elgg_get_registered_tag_metadata_names(); if ($md && in_array($categoryname, $md)) { $tag_registered = true; } if (!$tag_registered) { elgg_register_tag_metadata_name($categoryname); } $doc->tags = elgg_solr_get_tags_array($entity); if (!$tag_registered) { // we should unregister it now in case anything else // wants to use registered tag names elgg_set_config('registered_tag_metadata_names', $md); } return $doc; }