예제 #1
0
<?php

// form for inspect
$form_vars = ['method' => 'GET', 'action' => 'admin/elasticsearch/inspect', 'disable_security' => true];
echo elgg_view_form('elasticsearch/inspect', $form_vars);
// result listing
$result = '';
$guid = (int) get_input('guid');
if (!empty($guid)) {
    $registered_types = elasticsearch_get_registered_entity_types();
    $entity = get_entity($guid);
    if (empty($entity)) {
        // Entity doesn't exist in Elgg
        $result = elgg_echo('notfound');
    } elseif (!array_key_exists($entity->getType(), $registered_types) || array_key_exists($entity->getType(), $registered_types) && !empty($entity->getSubtype()) && !in_array($entity->getSubtype(), $registered_types[$entity->getType()])) {
        // entity won't be exported to ES
        $result = elgg_echo('elasticsearch:inspect:result:error:type_subtype');
    } else {
        // show inspect result
        elgg_push_context('search:index');
        $current_content = (array) $entity->toObject();
        elgg_pop_context();
        $last_indexed = $entity->getPrivateSetting(ELASTICSEARCH_INDEXED_NAME);
        if (is_null($last_indexed)) {
            $result = elgg_echo('elasticsearch:inspect:result:last_indexed:none');
        } elseif (empty($last_indexed)) {
            $result = elgg_echo('elasticsearch:inspect:result:last_indexed:scheduled');
        } else {
            $result = elgg_echo('elasticsearch:inspect:result:last_indexed:time', [date('c', $last_indexed)]);
            $result .= '<br />' . elgg_view('output/url', ['text' => elgg_echo('elasticsearch:inspect:result:reindex'), 'href' => "action/elasticsearch/admin/reindex_entity?guid={$entity->getGUID()}", 'is_action' => true, 'class' => 'elgg-button elgg-button-action']);
        }
예제 #2
0
/**
 * Get the $options for elgg_get_entities* in order to update the ElasticSearch index
 *
 * @param string $type which options to get
 *
 * @return false|array
 */
function elasticsearch_get_bulk_options($type = 'no_index_ts')
{
    $type_subtypes = elasticsearch_get_registered_entity_types();
    if (empty($type_subtypes)) {
        return false;
    }
    $dbprefix = elgg_get_config('dbprefix');
    switch ($type) {
        case 'no_index_ts':
            // new or updated entities
            return array('type_subtype_pairs' => $type_subtypes, 'limit' => false, 'wheres' => array("NOT EXISTS (\n\t\t\t\t\t\tSELECT 1 FROM {$dbprefix}private_settings ps\n\t\t\t\t\t\tWHERE ps.entity_guid = e.guid\n\t\t\t\t\t\tAND ps.name = '" . ELASTICSEARCH_INDEXED_NAME . "'\n\t\t\t\t\t)", "NOT EXISTS (\n\t\t\t\t\t\tSELECT 1 FROM {$dbprefix}users_entity ue\n\t\t\t\t\t\tWHERE ue.guid = e.guid\n\t\t\t\t\t\tAND ue.banned = 'yes'\n\t\t\t\t\t)"));
            break;
        case 'reindex':
            // a reindex has been initiated, so update all out of date entities
            $setting = (int) elasticsearch_get_setting('reindex_ts');
            if (empty($setting)) {
                return false;
            }
            return array('type_subtype_pairs' => $type_subtypes, 'limit' => false, 'private_setting_name_value_pairs' => array(array('name' => ELASTICSEARCH_INDEXED_NAME, 'value' => $setting, 'operand' => '<'), array('name' => ELASTICSEARCH_INDEXED_NAME, 'value' => 0, 'operand' => '>')));
            break;
        case 'update':
            // content that was updated in Elgg and needs to be reindexed
            return array('type_subtype_pairs' => $type_subtypes, 'limit' => false, 'private_setting_name_value_pairs' => array(array('name' => ELASTICSEARCH_INDEXED_NAME, 'value' => 0)));
            break;
        case 'count':
            // content that needs to be indexed
            return array('type_subtype_pairs' => $type_subtypes, 'count' => true);
            break;
    }
    return false;
}
예제 #3
0
 /**
  * Check if the given entity is searchable (and needs to be in Elasticsearch)
  *
  * @param \ElggEntity $entity the entity
  *
  * @return bool
  */
 protected static function isSearchableEntity(\ElggEntity $entity)
 {
     if (empty($entity) || !$entity instanceof \ElggEntity) {
         return false;
     }
     $type = $entity->getType();
     $type_subtypes = elasticsearch_get_registered_entity_types();
     if (!isset($type_subtypes[$type])) {
         return false;
     }
     $subtype = $entity->getSubtype();
     if (empty($subtype)) {
         // eg. user, group, site
         return true;
     }
     return in_array($subtype, $type_subtypes[$type]);
 }