ListView генерирует ложные результаты поиска TYPO3

Я использую расширение Indexed Search в TYPO3 8.7, чтобы сделать сайт и мои пользовательские записи доступными для поиска. Там я сталкиваюсь с проблемой, что всякий раз, когда я ищу термин, который содержится в представлении списка моего плагина пользовательских записей, я получаю результаты для всех проиндексированных подробных представлений. Полагаю, это потому, что все они используют одну и ту же страницу.

Я использую поиск не прямо на моем сайте, а через пользовательское действие контроллера поиска:

private function getSuggestions(String $text)
{
    /** @var QueryBuilder $queryBuilder */
    $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
        ->getQueryBuilderForTable('index_words');

    $result = $queryBuilder
        ->select('index_words.wid', 'index_words.baseword', 'index_phash.item_title', 'index_phash.cHashParams')
        ->from('index_words')
        ->leftJoin(
            'index_words',
            'index_rel',
            'index_rel',
            $queryBuilder->expr()->eq(
                'index_rel.wid',
                $queryBuilder->quoteIdentifier('index_words.wid')
            )
        )
        ->leftJoin(
            'index_rel',
            'index_phash',
            'index_phash',
            $queryBuilder->expr()->eq(
                'index_rel.phash',
                $queryBuilder->quoteIdentifier('index_phash.phash')
            )
        )

        ->leftJoin(
            'index_phash',
            'index_fulltext',
            'index_fulltext',
            $queryBuilder->expr()->eq(
                'index_phash.phash',
                $queryBuilder->quoteIdentifier('index_fulltext.phash')
            )
        )
        ->where(
            $queryBuilder->expr()->gt('index_words.metaphone', 0, \PDO::PARAM_INT),
            $queryBuilder->expr()->like(
                'index_words.baseword',
                $queryBuilder->createNamedParameter($queryBuilder->escapeLikeWildcards($text) . '%')
            ),
            // filter out indexed media files
            $queryBuilder->expr()->notLike(
                'index_words.baseword',
                $queryBuilder->createNamedParameter('%.jpg')
            ),
            $queryBuilder->expr()->notLike(
                'index_words.baseword',
                $queryBuilder->createNamedParameter('%.png')
            ),
            $queryBuilder->expr()->notLike(
            'index_words.baseword',
            $queryBuilder->createNamedParameter('%.gif')
        )

        )
        ->execute();

    $results = [];
    while ($row = $result->fetch()) {
        $cHashParams = unserialize($row['cHashParams']);

        // records without cHashParams are not related to the custom records
        if (!empty($cHashParams)){
        //                \TYPO3\CMS\Core\Utility\DebugUtility::debug($cHashParams, 'Debug: ' . __FILE__ . ' in Line: ' . __LINE__);

            if ($cHashParams['tx_myext_locations[controller]']) {
                $row['uid'] = $cHashParams['tx_myext_locations[location]'];
                $row['type'] = $cHashParams['tx_myext_locations[controller]'];
                $row['name'] = $this->getLocationName($row['uid']);
                array_push($results, $row);

            }elseif ( $cHashParams['tx_myext_events[controller]']){
                $row['uid'] = $cHashParams['tx_myext_events[event]'];
                $row['type'] = $cHashParams['tx_myext_events[controller]'];
                $row['name'] = $this->getEventName($row['uid']);
                array_push($results, $row);

            }elseif ($cHashParams['tx_news_pi1[controller]']){
                $row['uid'] = $cHashParams['tx_news_pi1[news]'];
                $row['type'] = $cHashParams['tx_news_pi1[controller]'];
                $row['name'] = $this->getNewsName($row['uid']);
                array_push($results, $row);
            }

        }

    }
    return $results;
}

У кого-нибудь есть идея, как я могу получить представление списка из моего индекса?

или же

Что-то не так с таблицей pHash в моем запросе?

Я попытался использовать конфигурацию индексатора типа "Записи базы данных", но из-за требований проекта, предъявляемых пользователями BE, я не могу разместить все записи на одной странице.

Я пытался добавить комментарий в верхнюю часть списка, чтобы предотвратить его индексацию, но это все-таки происходит.

Я дал своему плагину правильную конфигурацию real_url, потому что я думал, что конфигурация индексатора могла бы исключить определенные шаблоны URL, но нет.

0 ответов

Другие вопросы по тегам