/**
     * Helper for solr raw searches.
     * Deals with the language, meta_installation, section and visibility filters + solr sharding if any
     * @param array $params
     * @param string $requestType
     * @param bool $useDefaultFilters
     * @return array
     */
    public static function rawSearch( $params, $requestType = 'php', $useDefaultFilters = true, $includeIsInvisible = true )
    {
        eZDebug::accumulatorStart( __CLASS__ . '::' . __FUNCTION__, 'Merck' );

        $findINI = eZINI::instance( 'ezfind.ini' );
        $solrINI = eZINI::instance( 'solr.ini' );
        $siteINI = eZINI::instance();
        $currentLanguage = $siteINI->variable( 'RegionalSettings', 'ContentObjectLocale' );

        // always use extended Dismax query handler when available
        if( isset($params['qt']) && $params['qt'] == 'ezpublish' )
            $params['defType'] = 'edismax';

        if ( $useDefaultFilters )
        {
            if ( !isset( $params['fq'] ) )
                $params['fq'] = '';
            else
                $params['fq'] .= ' AND ';
            $params['fq'] .= implode( ' AND ', array(
                'meta_installation_id_ms:' . eZSolr::installationID(),
                '(attr_offline_date_dt:"1970-01-01T01:00:00Z" OR attr_offline_date_dt:[NOW TO *])',
                '( meta_section_id_si:1 OR meta_section_id_si:3 )',
            ) );
            if ($includeIsInvisible) {
                $params['fq'] .= ' AND ' . 'attr_is_invisible_' . ClusterTool::clusterIdentifier() . '_b:false';
            }
        }

        if ( $findINI->variable( 'LanguageSearch', 'MultiCore' ) == 'enabled' )
        {
            $languageMapping = $findINI->variable( 'LanguageSearch', 'LanguagesCoresMap' );
            $shardMapping = $solrINI->variable( 'SolrBase', 'Shards' );
            $fullSolrURI = $shardMapping[$languageMapping[$currentLanguage]];
        }
        else
        {
            $fullSolrURI = $solrINI->variable( 'SolrBase', 'SearchServerURI' );
            // Autocomplete search should be done in current language and fallback languages
            $validLanguages = array_unique(
                array_merge(
                    LocaleTool::languageList(),
                    array( $currentLanguage )
                )
            );
            if( $useDefaultFilters )
                $params['fq'] .= ' AND meta_language_code_ms:(' . implode( ' OR ', $validLanguages ) . ')';
        }

        solrTool::solrStopWordsFilter( $params );    //excluding stopwords
        self::parseBooleanOperators( $params );      // translations for bookean operators
        $solrBase = new eZSolrBase( $fullSolrURI );
        $result = $solrBase->rawSolrRequest( '/select', $params, $requestType );
        if ( !$result )
            self::addNoCacheHeaders();
        
        eZDebug::accumulatorStop( __CLASS__ . '::' . __FUNCTION__ );

        return $result;
    }
    /**
     * @param string $clusterIdentifier
     * @throws eZDBException
     */
    public static function fill($clusterIdentifier)
    {
        $configPath = "extension/ezoscar/bin/php/seo/config.json";
        $cli = eZCLI::instance();

        $config = file_get_contents($configPath);
        if(!$config)
        {
            $cli->output("Bad filepath for config file");
            eZExecution::cleanExit();
        }

        $config = json_decode($config, true);

        $db = MMDB::instance();

        $rows = $db->arrayQuery(sprintf("SELECT * FROM mm_seo WHERE cluster_identifier = '%s'", $clusterIdentifier));
        $progressBar = new ezcConsoleProgressbar( new ezcConsoleOutput(), count($rows), array(
            'emptyChar' => ' ',
            'barChar'   => '='
        ) );
        $progressBar->start();

        foreach($rows as $row)
        {
            if(!array_key_exists($clusterIdentifier, $config))
            {
                continue;
            }

            $fq = $config[$clusterIdentifier][$row["application_identifier"]]["filters"];

            $solrBase = new eZSolrBase();
            $params = array(
                'indent'       => 'on',
                'q'            => '"'.$row['keyword'].'"',
                'fq'           => $fq,
                'start'        => 0,
                'rows'         => 0,
                'fl'           => '',
                'qt'           => 'ezpublish',
                'explainOther' => '',
                'hl.fl'        => '',
            );

            $results = $solrBase->rawSolrRequest('/select', $params);
            $num_found = $results['response']['numFound'];
            $db->query(sprintf("UPDATE mm_seo SET nb_results=%d, speciality_url='%s', keyword_url='%s' WHERE id=%d",
                $num_found,
                self::sanitize($row["speciality"]),
                self::sanitize($row["keyword"]),
                $row["id"]));

            $progressBar->advance();
        }
        $progressBar->finish();
        $cli->output();
    }
    /**
     * rawSolrRequest function
     *
     * @param base specifies the Solr server/shard to use
     * @param request the base request
     * @param parameters all parameters for the request
     *
     * @return array result as a PHP array
     */
    public function rawSolrRequest( $baseURI, $request, $parameters = array() )
    {

        $solr = new eZSolrBase( $baseURI );
        return array( 'result' => $solr->rawSolrRequest( $request, $parameters ) );
    }
$solr = new eZSolr();
$solrBase = new eZSolrBase();

$params = array(
    'indent'       => 'on',
    'q'            => '',
    'fq'           => 'meta_installation_id_ms:' . eZSolr::installationID() . ' AND meta_path_si:' . $top_node_id,
    'start'        => 0,
    'rows'         => 0,
    'fl'           => 'meta_main_url_alias_ms,meta_main_node_id_si,meta_name_t,meta_guid_ms,meta_language_code_ms',
    'qt'           => 'ezpublish',
    'explainOther' => '',
    'hl.fl'        => '',
);

$r = $solrBase->rawSolrRequest('/select', $params);
$num_found = $r['response']['numFound'];

$offset = 0;
$params['rows'] = 100;
while ( $offset < $num_found )
{
    $r = $solrBase->rawSolrRequest('/select', $params);

    foreach ( $r['response']['docs'] as $row )
    {
        $n = new kezfinCleanNode($row);

        if ( !$n->node() )               // ghost
            $ghosts[] = $n;
        elseif ( $n->url_alias != $n->node()->urlAlias() )       // wrong path
Example #5
0
File: index.php Project: truffo/eep
 private function advanced($args, $additional)
 {
     $parameters = array();
     $limit = 10;
     // Solr default; TODO: see if we can get this from the Solr config instead
     // set the query string
     if (isset($args[3])) {
         $parameters['q'] = $args[3];
     } else {
         echo "Query is required\n";
         return;
     }
     // fields to list
     if (isset($args[4])) {
         $parameters['fl'] = $args[4];
     }
     // fields to query
     if (isset($args[5])) {
         $parameters['fq'] = $args[5];
     }
     // offset and limit
     if (isset($additional['offset'])) {
         $parameters['start'] = $additional['offset'];
     }
     if (isset($additional['limit'])) {
         $parameters['rows'] = $additional['limit'];
         $limit = $additional['limit'];
     }
     // output format
     if (isset($additional['output']) && $additional['output'] == 'xml') {
         $parameters['wt'] = 'xml';
     }
     $showComplex = false;
     if (isset($additional['show-complex'])) {
         $showComplex = true;
     }
     $responseWriter = 'php';
     // default eZFind Solr QueryResponseWriter
     if (isset($additional['output'])) {
         // xml, json, csv etc;
         // check /ezfind/java/solr/conf/solrconfig.xml for other valid/enabled queryResponseWriter
         $responseWriter = $additional['output'];
     }
     // run request directly to avoid hardcoded 'wt' parameter issue when using eZFunctionHandler
     $solr = new eZSolrBase(false);
     $search = $solr->rawSolrRequest('/select', $parameters, $responseWriter);
     if (isset($search['response']['numFound']) && $search['response']['numFound'] > 0 && !isset($additional['output'])) {
         $results = array();
         $header = array();
         $numFound = $search['response']['numFound'];
         $start = $search['response']['start'];
         if (count($search['response']['docs']) > 0) {
             foreach ($search['response']['docs'][0] as $index => $doc) {
                 $header[] = $index;
             }
             $results[] = $header;
             $fieldListCount = count(explode(',', $parameters['fl']));
             foreach ($search['response']['docs'] as $doc) {
                 $result = array();
                 $resultCount = count($doc);
                 foreach ($doc as $attribute) {
                     if (is_array($attribute)) {
                         if ($showComplex) {
                             $result[] = implode('¦', $attribute);
                         } else {
                             $result[] = 'array()';
                         }
                     } else {
                         if (is_object($attribute)) {
                             if ($showComplex) {
                                 $result[] = implode('¦', (array) $attribute);
                             } else {
                                 $result[] = 'object()';
                             }
                         } else {
                             $result[] = $attribute;
                         }
                     }
                 }
                 // Not all docs return all fields queried for.
                 // Fix the results table display by adding placeholders for those cases
                 if ($resultCount !== $fieldListCount) {
                     $diff = $fieldListCount - $resultCount;
                     for ($i = 0; $i < $diff; $i++) {
                         $result[] = 'no value';
                     }
                 }
                 $results[] = $result;
             }
             eep::printTable($results, "List ezfind results [{$limit}/{$start}/{$numFound}]");
         }
     } else {
         if ($search && isset($additional['output']) && in_array($additional['output'], array('xml', 'csv'))) {
             echo $search[0];
         } else {
             if ($search && isset($additional['output']) && $additional['output'] == 'json') {
                 // TODO: eZ is json_decode'ing requests made with wt=json before passing back the result set
                 // figure out a better way around that
                 //
                 // In the meantime
                 echo json_encode($search) . "\n";
             } else {
                 echo "No results\n";
             }
         }
     }
 }
 /**
  * Returns autocomplete suggestions for given params
  *
  * @param mixed $args
  * @return array
  */
 public static function autocomplete($args)
 {
     $result = array();
     $findINI = eZINI::instance('ezfind.ini');
     $solrINI = eZINI::instance('solr.ini');
     $siteINI = eZINI::instance();
     $currentLanguage = $siteINI->variable('RegionalSettings', 'ContentObjectLocale');
     $input = isset($args[0]) ? mb_strtolower($args[0], 'UTF-8') : null;
     $limit = isset($args[1]) ? (int) $args[1] : (int) $findINI->variable('AutoCompleteSettings', 'Limit');
     $facetField = $findINI->variable('AutoCompleteSettings', 'FacetField');
     $params = array('q' => '*:*', 'json.nl' => 'arrarr', 'facet' => 'true', 'facet.field' => $facetField, 'facet.prefix' => $input, 'facet.limit' => $limit, 'facet.mincount' => 1);
     if ($findINI->variable('LanguageSearch', 'MultiCore') == 'enabled') {
         $languageMapping = $findINI->variable('LanguageSearch', 'LanguagesCoresMap');
         $shardMapping = $solrINI->variable('SolrBase', 'Shards');
         $fullSolrURI = $shardMapping[$languageMapping[$currentLanguage]];
     } else {
         $fullSolrURI = $solrINI->variable('SolrBase', 'SearchServerURI');
         // Autocomplete search should be done in current language and fallback languages
         $validLanguages = array_unique(array_merge($siteINI->variable('RegionalSettings', 'SiteLanguageList'), array($currentLanguage)));
         $params['fq'] = 'meta_language_code_ms:(' . implode(' OR ', $validLanguages) . ')';
     }
     $solrBase = new eZSolrBase($fullSolrURI);
     $result = $solrBase->rawSolrRequest('/select', $params, 'json');
     return $result['facet_counts']['facet_fields'][$facetField];
 }
            );

            $params = array(
                'indent'        => 'on',
                'q'             => '*:*',
                'start'         => 0,
                'rows'          => 1,
                'fq'            => 'meta_remote_id_ms:'.$remoteId,
                'fl'            => '',//implode(',', $fields),
                'qt'            => '',
                'explainOther'  => '',
                'hl.fl'         => '',
            );

            $solrBase = new eZSolrBase();
            $result = $solrBase->rawSolrRequest( '/select', $params, 'php' );
            $result['response']['docs'][0]['attr_content_rating_'.$row['cluster_identifier'].'_f'] = $row['total'];

            $solrIndexationJob = new SolrIndexationJob(null);
            $solrIndexationJob->setAttribute('data', json_encode($result['response']['docs'][0]));
            $solrIndexationJob->store();
        }

        $mdb->query(
            sprintf(
                'UPDATE mm_rating_remote SET to_reindex = 0 WHERE remote_id = "%s"',
                $remoteId
            )
        );
    }
 /**
  * Returns autocomplete suggestions for given params
  *
  * @param mixed $args
  * @return array
  */
 public static function autocomplete($args)
 {
     $result = array();
     $findINI = eZINI::instance('ezfind.ini');
     // Only make calls if explicitely enabled
     if ($findINI->hasVariable('AutoCompleteSettings', 'AutoComplete') && $findINI->variable('AutoCompleteSettings', 'AutoComplete') === 'enabled') {
         $solrINI = eZINI::instance('solr.ini');
         $siteINI = eZINI::instance();
         $currentLanguage = $siteINI->variable('RegionalSettings', 'ContentObjectLocale');
         $input = isset($args[0]) ? mb_strtolower($args[0], 'UTF-8') : null;
         $limit = isset($args[1]) ? (int) $args[1] : (int) $findINI->variable('AutoCompleteSettings', 'Limit');
         $facetField = $findINI->variable('AutoCompleteSettings', 'FacetField');
         $facetMethod = $findINI->variable('AutoCompleteSettings', 'FacetMethod');
         $params = array('q' => '*:*', 'rows' => 0, 'json.nl' => 'arrarr', 'facet' => 'true', 'facet.field' => $facetField, 'facet.prefix' => $input, 'facet.limit' => $limit, 'facet.method' => $facetMethod, 'facet.mincount' => 1);
         if ($findINI->variable('LanguageSearch', 'MultiCore') == 'enabled') {
             $languageMapping = $findINI->variable('LanguageSearch', 'LanguagesCoresMap');
             $shardMapping = $solrINI->variable('SolrBase', 'Shards');
             $fullSolrURI = $shardMapping[$languageMapping[$currentLanguage]];
         } else {
             $fullSolrURI = $solrINI->variable('SolrBase', 'SearchServerURI');
             // Autocomplete search should be done in current language and fallback languages
             $validLanguages = array_unique(array_merge($siteINI->variable('RegionalSettings', 'SiteLanguageList'), array($currentLanguage)));
             $params['fq'] = 'meta_language_code_ms:(' . implode(' OR ', $validLanguages) . ')';
         }
         //build the query part for the subtree limitation
         if (isset($args[2]) && (int) $args[2]) {
             if (isset($params['fq']) && $params['fq']) {
                 $params['fq'] .= ' AND ';
             }
             $params['fq'] .= eZSolr::getMetaFieldName('path') . ':' . (int) $args[2];
         }
         //build the query part for the class limitation
         if (isset($args[3]) && $args[3]) {
             if (isset($params['fq']) && $params['fq']) {
                 $params['fq'] .= ' AND ';
             }
             $classes = explode(',', $args[3]);
             $classQueryParts = array();
             foreach ($classes as $class) {
                 if (!is_numeric($class)) {
                     if ($class = eZContentClass::fetchByIdentifier($class)) {
                         $classQueryParts[] = eZSolr::getMetaFieldName('contentclass_id') . ':' . $class->attribute('id');
                     }
                 } else {
                     $classQueryParts[] = eZSolr::getMetaFieldName('contentclass_id') . ':' . $class;
                 }
             }
             $classQueryParts = implode(' OR ', $classQueryParts);
             $params['fq'] .= '(' . $classQueryParts . ')';
         }
         $solrBase = new eZSolrBase($fullSolrURI);
         $result = $solrBase->rawSolrRequest('/select', $params, 'json');
         return $result['facet_counts']['facet_fields'][$facetField];
     } else {
         // not enabled, just return an empty array
         return array();
     }
 }