对于我的全文,searchI使用了https://gist.github.com/ZeBigDuck/1234419/edaa13a851b1ea1e9926ec9c003ad762876ffe1d
它返回一个带有分数的数组:
array:1 [▼
0 => array:1 [▼
"score" => "2.181887149810791"
]
]但我想要它返回一个实体集合。多么?
MatchAgainst类:
`
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
class MatchAgainst extends FunctionNode
{
public $columns = array();
public $needle;
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
do {
$this->columns[] = $parser->StateFieldPathExpression();
$parser->match(Lexer::T_COMMA);
} while (!$parser->getLexer()->isNextToken(Lexer::T_INPUT_PARAMETER));
// Got an input parameter
$this->needle = $parser->InputParameter();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
$haystack = null;
$first = true;
foreach ($this->columns as $column) {
$first ? $first = false : $haystack .= ', ';
$haystack .= $column->dispatch($sqlWalker);
}
return "MATCH(" .
$haystack .
") AGAINST (" .
$this->needle->dispatch($sqlWalker) .
" IN BOOLEAN MODE )";
}
}`
在我的存储库中:
$query = $this->getEntityManager()->createQuery('
SELECT
MATCH_AGAINST (d.title, :searchTerms) as score
FROM AppBundle:Doc d
WHERE MATCH_AGAINST (d.title, :searchTerms) > 1
ORDER BY score desc
')
->setParameter('searchTerms', $q)
;如果我将我的存储库函数更改为smething
$query = $this->getEntityManager()->createQuery('
SELECT d
FROM AppBundle:Doc d
MATCH_AGAINST (d.title, :searchTerms)
')
->setParameter('searchTerms', $q)
;我得到了
错误:字符串的预期结束,得到“MATCH_AGAINST”
发布于 2017-10-29 14:15:29
我只需要做:
->select("d") ->andWhere("MATCH_AGAINST (d.title, :searchTerms) > 1") ->setParameter('searchTerms', $q)
https://stackoverflow.com/questions/47000015
复制相似问题