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, но нет.