/**
     * Show details for metaphone value
     *
     * @param 	integer		Metaphone integer hash
     * @return 	string		HTML content
     * @todo Define visibility
     */
    public function showDetailsForMetaphone($metaphone)
    {
        // Finding top-20 on frequency for this phash:
        $ftrows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('index_words.*', 'index_words', 'index_words.metaphone = ' . (int) $metaphone, '', 'index_words.baseword', '');
        if (count($ftrows)) {
            $content .= '<h4>Metaphone: ' . $this->indexerObj->metaphone($ftrows[0]['baseword'], 1) . '</h4>';
            $content .= '
				<tr class="tableheader bgColor5">
					<td>Word</td>
					<td>Is stopword?</td>
				</tr>';
            if (is_array($ftrows)) {
                foreach ($ftrows as $wDat) {
                    $content .= '
						<tr class="bgColor4">
							<td>' . $this->linkWordDetails(htmlspecialchars($wDat['baseword']), $wDat['wid']) . '</td>
							<td>' . htmlspecialchars($wDat['is_stopword'] ? 'YES' : 'No') . '</td>
						</tr>';
                }
            }
            $content = '
				<table border="0" cellspacing="1" cellpadding="2" class="c-list">' . $content . '
				</table>';
            if ($this->indexerObj->metaphone($ftrows[0]['baseword']) != $metaphone) {
                $content .= 'ERROR: Metaphone string and hash did not match for some reason!?';
            }
            // Add go-back link:
            $content = $content . $this->linkList();
        }
        return $content;
    }
Пример #2
0
 /**
  * Statistics for a given page hash
  *
  * @param int $pageHash
  * @return void
  */
 public function statisticDetailsAction($pageHash = 0)
 {
     $pageHash = (int) $pageHash;
     // Set back button
     $icon = $this->view->getModuleTemplate()->getIconFactory()->getIcon('actions-view-go-up', Icon::SIZE_SMALL);
     $backButton = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar()->makeLinkButton()->setTitle($this->getLanguageService()->sL('LLL:EXT:indexed_search/Resources/Private/Language/locallang.xml:administration.back'))->setIcon($icon)->setHref($this->getHref('Administration', 'statistic'));
     $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar()->addButton($backButton);
     $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('index_phash');
     $pageHashRow = $queryBuilder->select('*')->from('index_phash')->where($queryBuilder->expr()->eq('phash', $queryBuilder->createNamedParameter($pageHash, \PDO::PARAM_INT)))->execute()->fetch();
     if (!is_array($pageHashRow)) {
         $this->redirect('statistic');
     }
     $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('index_debug');
     $debugRow = $queryBuilder->select('*')->from('index_debug')->where($queryBuilder->expr()->eq('phash', $queryBuilder->createNamedParameter($pageHash, \PDO::PARAM_INT)))->execute()->fetchAll();
     $debugInfo = [];
     $lexer = '';
     if (is_array($debugRow)) {
         $debugInfo = unserialize($debugRow[0]['debuginfo']);
         $lexer = $debugInfo['lexer'];
         unset($debugInfo['lexer']);
     }
     $pageRecord = BackendUtility::getRecord('pages', $pageHashRow['data_page_id']);
     $keywords = is_array($pageRecord) ? array_flip(GeneralUtility::trimExplode(',', $pageRecord['keywords'], true)) : [];
     $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('index_words');
     $wordRecords = $queryBuilder->select('index_words.*', 'index_rel.*')->from('index_words')->from('index_rel')->where($queryBuilder->expr()->eq('index_rel.phash', $queryBuilder->createNamedParameter($pageHash, \PDO::PARAM_INT)), $queryBuilder->expr()->eq('index_words.wid', $queryBuilder->quoteIdentifier('index_rel.wid')))->orderBy('index_words.baseword')->execute()->fetchAll();
     foreach ($wordRecords as $id => $row) {
         if (isset($keywords[$row['baseword']])) {
             $wordRecords[$id]['is_keyword'] = true;
         }
     }
     $metaphoneRows = $metaphone = [];
     if ($this->enableMetaphoneSearch && is_array($wordRecords)) {
         // Group metaphone hash
         foreach ($wordRecords as $row) {
             $metaphoneRows[$row['metaphone']][] = $row['baseword'];
         }
         foreach ($metaphoneRows as $hash => $words) {
             if (count($words) > 1) {
                 $metaphone[] = ['metaphone' => $this->indexer->metaphone($words[0], 1), $hash, 'words' => $words, 'hash' => $hash];
             }
         }
     }
     // sections
     $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('index_section');
     $sections = $queryBuilder->select('*')->from('index_section')->where($queryBuilder->expr()->eq('phash', $queryBuilder->createNamedParameter($pageHash, \PDO::PARAM_INT)))->execute()->fetchAll();
     // top words
     $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('index_words');
     $topCountWords = $queryBuilder->select('index_words.baseword', 'index_words.metaphone', 'index_rel.*')->from('index_words')->from('index_rel')->setMaxResults(20)->where($queryBuilder->expr()->eq('index_rel.phash', $queryBuilder->createNamedParameter($pageHash, \PDO::PARAM_INT)), $queryBuilder->expr()->eq('index_words.is_stopword', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)), $queryBuilder->expr()->eq('index_words.wid', $queryBuilder->quoteIdentifier('index_rel.wid')))->orderBy('index_rel.count', 'DESC')->execute()->fetchAll();
     // top frequency
     $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('index_words');
     $topFrequency = $queryBuilder->select('index_words.baseword', 'index_words.metaphone', 'index_rel.*')->from('index_words')->from('index_rel')->setMaxResults(20)->where($queryBuilder->expr()->eq('index_rel.phash', $queryBuilder->createNamedParameter($pageHash, \PDO::PARAM_INT)), $queryBuilder->expr()->eq('index_words.is_stopword', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)), $queryBuilder->expr()->eq('index_words.wid', $queryBuilder->quoteIdentifier('index_rel.wid')))->orderBy('index_rel.freq', 'DESC')->execute()->fetchAll();
     $this->view->assignMultiple(['phash' => (int) $pageHash, 'phashRow' => $pageHashRow, 'words' => $wordRecords, 'sections' => $sections, 'topCount' => $topCountWords, 'topFrequency' => $topFrequency, 'debug' => $debugInfo, 'lexer' => $lexer, 'metaphone' => $metaphone, 'page' => $pageRecord, 'keywords' => $keywords]);
 }
Пример #3
0
    /**
     * Statistics for a given page hash
     *
     * @param int $pageHash
     * @return void
     */
    public function statisticDetailsAction($pageHash = 0)
    {
        // Set back button
        $icon = $this->view->getModuleTemplate()->getIconFactory()->getIcon('actions-view-go-up', Icon::SIZE_SMALL);
        $backButton = $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar()->makeLinkButton()->setTitle($this->getLanguageService()->sL('LLL:EXT:indexed_search/Resources/Private/Language/locallang.xml:administration.back'))->setIcon($icon)->setHref($this->getHref('Administration', 'statistic'));
        $this->view->getModuleTemplate()->getDocHeaderComponent()->getButtonBar()->addButton($backButton);
        $pageHash = (int) $pageHash;
        $db = $this->getDatabaseConnection();
        $pageHashRow = $db->exec_SELECTgetSingleRow('*', 'index_phash', 'phash = ' . (int) $pageHash);
        if (!is_array($pageHashRow)) {
            $this->redirect('statistic');
        }
        $debugRow = $db->exec_SELECTgetRows('*', 'index_debug', 'phash = ' . (int) $pageHash);
        $debugInfo = array();
        $lexer = '';
        if (is_array($debugRow)) {
            $debugInfo = unserialize($debugRow[0]['debuginfo']);
            $lexer = $debugInfo['lexer'];
            unset($debugInfo['lexer']);
        }
        $pageRecord = BackendUtility::getRecord('pages', $pageHashRow['data_page_id']);
        $keywords = is_array($pageRecord) ? array_flip(GeneralUtility::trimExplode(',', $pageRecord['keywords'], true)) : array();
        $wordRecords = $db->exec_SELECTgetRows('index_words.*, index_rel.*', 'index_rel, index_words', 'index_rel.phash = ' . (int) $pageHash . ' AND index_words.wid = index_rel.wid', '', 'index_words.baseword');
        foreach ($wordRecords as $id => $row) {
            if (isset($keywords[$row['baseword']])) {
                $wordRecords[$id]['is_keyword'] = true;
            }
        }
        $metaphoneRows = $metaphone = array();
        if ($this->enableMetaphoneSearch && is_array($wordRecords)) {
            // Group metaphone hash
            foreach ($wordRecords as $row) {
                $metaphoneRows[$row['metaphone']][] = $row['baseword'];
            }
            foreach ($metaphoneRows as $hash => $words) {
                if (count($words) > 1) {
                    $metaphone[] = array('metaphone' => $this->indexer->metaphone($words[0], 1), $hash, 'words' => $words, 'hash' => $hash);
                }
            }
        }
        $this->view->assignMultiple(array('phash' => $pageHash, 'phashRow' => $pageHashRow, 'words' => $wordRecords, 'sections' => $db->exec_SELECTgetRows('*', 'index_section', 'index_section.phash = ' . (int) $pageHash), 'topCount' => $db->exec_SELECTgetRows('index_words.baseword, index_words.metaphone, index_rel.*', 'index_rel, index_words', 'index_rel.phash = ' . (int) $pageHash . ' AND index_words.wid = index_rel.wid
					 AND index_words.is_stopword=0', '', 'index_rel.count DESC', '20'), 'topFrequency' => $db->exec_SELECTgetRows('index_words.baseword, index_words.metaphone, index_rel.*', 'index_rel, index_words', 'index_rel.phash = ' . (int) $pageHash . ' AND index_words.wid = index_rel.wid
					 AND index_words.is_stopword=0', '', 'index_rel.freq DESC', '20'), 'debug' => $debugInfo, 'lexer' => $lexer, 'metaphone' => $metaphone, 'page' => $pageRecord, 'keywords' => $keywords));
    }
Пример #4
0
	/**
	 * Statistics for a given page hash
	 *
	 * @param int $pageHash
	 * @return void
	 */
	public function statisticDetailsAction($pageHash = 0) {
		$pageHash = (int)$pageHash;
		$db = $this->getDatabaseConnection();
		$pageHashRow = $db->exec_SELECTgetSingleRow('*', 'index_phash', 'phash = ' . (int)$pageHash);

		if (!is_array($pageHashRow)) {
			$this->redirect('statistic');
		}

		$debugRow = $db->exec_SELECTgetRows('*', 'index_debug', 'phash = ' . (int)$pageHash);
		$debugInfo = array();
		$lexer = '';
		if (is_array($debugRow)) {
			$debugInfo = unserialize($debugRow[0]['debuginfo']);
			$lexer = $debugInfo['lexer'];
			unset($debugInfo['lexer']);
		}
		$pageRecord = BackendUtility::getRecord('pages', $pageHashRow['data_page_id']);
		$keywords = is_array($pageRecord) ? array_flip(GeneralUtility::trimExplode(',', $pageRecord['keywords'], TRUE)) : array();
		$wordRecords = $db->exec_SELECTgetRows(
			'index_words.*, index_rel.*',
			'index_rel, index_words',
			'index_rel.phash = ' . (int)$pageHash . ' AND index_words.wid = index_rel.wid',
			'',
			'index_words.baseword'
		);
		foreach($wordRecords as $id => $row) {
			if (isset($keywords[$row['baseword']])) {
				$wordRecords[$id]['is_keyword'] = TRUE;
			}
		}
		$metaphoneRows = $metaphone = array();
		if ($this->enableMetaphoneSearch && is_array($wordRecords)) {
			// Group metaphone hash
			foreach ($wordRecords as $row) {
				$metaphoneRows[$row['metaphone']][] = $row['baseword'];
			}

			foreach ($metaphoneRows as $hash => $words) {
				if (count($words) > 1) {
					$metaphone[] = array(
						'metaphone' => $this->indexer->metaphone($words[0], 1), $hash,
						'words' => $words,
						'hash' => $hash
					);
				}
			}
		}
		$this->view->assignMultiple(array(
			'phash' => $pageHash,
			'phashRow' => $pageHashRow,
			'words' => $wordRecords,
			'sections' => $db->exec_SELECTgetRows(
				'*',
				'index_section',
				'index_section.phash = ' . (int)$pageHash
			),
			'topCount' => $db->exec_SELECTgetRows(
				'index_words.baseword, index_words.metaphone, index_rel.*',
				'index_rel, index_words',
				'index_rel.phash = ' . (int)$pageHash . ' AND index_words.wid = index_rel.wid
					 AND index_words.is_stopword=0',
			 	'',
			 	'index_rel.count DESC',
				 '20'
			 ),
			'topFrequency' => $db->exec_SELECTgetRows(
				'index_words.baseword, index_words.metaphone, index_rel.*',
				'index_rel, index_words',
				'index_rel.phash = ' . (int)$pageHash . ' AND index_words.wid = index_rel.wid
					 AND index_words.is_stopword=0',
			 	'',
				'index_rel.freq DESC',
				'20'
			),
			'debug' => $debugInfo,
			'lexer' => $lexer,
			'metaphone' => $metaphone,
			'page' => $pageRecord,
			'keywords' => $keywords
	));
	}