TYPO3 8.7.13 - MariaDB QueryBuilder FULLTEXT - PullRequest
0 голосов
/ 26 июня 2018
SELECT name 
FROM tx_snippethighlightsyntax_domain_model_snippets 
WHERE (MATCH(name, description, code, comment) AGAINST ('css'));

Этот запрос работает в phpMyAdmin с MariaDB. Теперь моя «проблема» - адаптировать это в TYPO3 с помощью QueryBuilder. Я не вижу оператора MATCH или ПРОТИВ.

Пока моя функция начинается с этого:

private $tx = 'tx_snippethighlightsyntax_domain_model_snippets';

public function ftsSearch()
    {
        $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
        $ftsQueryBuilder = $connectionPool->getQueryBuilderForTable($this->tx);
        $fts = $ftsQueryBuilder
            ->select($this->tx . '.name')
            ->from($this->tx)
            ->where($ftsQueryBuilder->expr()->eq(
                MAGIC HAPPENS HERE ?
            )
            ->execute()
            ->fetchAll();
        return $fts;
    }

Ответы [ 2 ]

0 голосов
/ 27 июня 2018
private $tx = 'tx_snippethighlightsyntax_domain_model_snippets';

public function ftsSearch()
{
    $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
    $ftsQueryBuilder = $connectionPool->getQueryBuilderForTable($this->tx);
    $fts = $ftsQueryBuilder
        ->select($this->tx . '.name')
        ->from($this->tx)
        ->where('MATCH('
            . $this->tx .'.name,'
            . $this->tx .'.description,'
            . $this->tx .'.code,'
            . $this->tx .'.comment)'
            . ' AGAINST(' . $ftsQueryBuilder->createNamedParameter('put_search_here')
            . ')')
        ->execute()
        ->fetchAll();
    return $fts;
}

Этот работает для меня. Спасибо!

0 голосов
/ 26 июня 2018

Расширение индексированного поиска в ядре TYPO3 использует в запросах MATCH и AGAINST.

Следующий код, взятый из IndexSearchRepository , должен помочь вам в создании запроса

    $searchBoolean = '';
    if ($searchData['searchBoolean']) {
        $searchBoolean = ' IN BOOLEAN MODE';
    }
    $queryBuilder->andWhere(
        'MATCH (' . $queryBuilder->quoteIdentifier($searchData['fulltextIndex']) . ')'
        . ' AGAINST (' . $queryBuilder->createNamedParameter($searchData['searchString'])
        . $searchBoolean
        . ')'
    );
...