/** * 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; }
/** * 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]); }
/** * 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)); }
/** * 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 )); }