首页 > 解决方案 > Symfony 4 Match Against 按相关性排序

问题描述

我想按 revelance 排序,这意味着如果我在 db 中有:

我想输入foo它将被排序:

public function findBySearchQueryPagin2(string $rawQuery, int $limit = 999, string $sort = "DESC", string $sortBy = "relevance", int $page = 1): pagerfanta
{
    $query = $this->sanitizeSearchQuery($rawQuery);
    $sort = $this->sanitizeSearchQuery($sort);
    $sortBy = $this->sanitizeSearchQuery($sortBy);
    $limit = $this->sanitizeSearchQuery($limit);
    $page = $this->sanitizeSearchQuery($page);
    if(($sort != 'ASC')&&($sort != 'DESC')) $sort = 'DESC';
    if(($sortBy != 'date')&&($sortBy != 'name')&&($sortBy != 'relevance')){
        $sortBy = null;
    } else {
        if($sortBy=="name") $sortBy = "primarytitle";
        if($sortBy=="date") $sortBy = "startyear";
        if($sortBy=="relevance") $sortBy = "relevance";
    }
    $queryBuilder = $this->createQueryBuilder('p')
        ->andWhere("MATCH_AGAINST (p.primarytitle, :searchTerms) > 1")
        ->setParameter('searchTerms', $query)
        ->setMaxResults($limit);
    var_dump($query);
       if($sortBy !== "relevance"){
           $queryBuilder
               ->orderBy('p.' . $sortBy, $sort);
       }
    return $this->createPaginator($queryBuilder->getQuery(), $page);
}

标签: symfonymatch-against

解决方案


推荐阅读