BOOLEAN 和 LIKE 与 Yii2 一起搜索?

BOOLEAN and LIKE search together with Yii2?

我使用 YII2 Framework 并且我在 BOOLEAN MODE 中构建了这个搜索:

if( $campi[$i] == "PossessoreElenco" ){
          if(strpos($valor[$i], ' OR ') !== false) {
                $titOR = str_replace(" OR ", ' ', $valor[$i]);
          $query.=  'MATCH(PossessoreElenco) AGAINST("'.$titOR.'" IN BOOLEAN MODE)'; }

现在,如果我写“Marc*”,结果会同时显示:“Marco”、“San Marco”。这是对的,但不是我想要的结果。我只接受以我写的单词开头的结果。所以,最后,如果我在布尔模式下写 Marc* OR Mich*,我想搜索以“Marc”或“Mich”(例如 'Marco' 或 'Michele')开头的结果,而不是所有包含单词的结果(例如,我不想要 'San Marco')。有机会实现这个选项来维护布尔搜索吗? 我可以使用 LIKE 'Marc%',但在这个解决方案中我失去了布尔搜索。 感谢您的帮助!

布尔全文搜索基于单词,不关心字符串的开头.. 如果你需要这个,你可以强制查询添加一个有条款来过滤结果行

 WHERE MATCH(PossessoreElenco) AGAINST( ?  IN BOOLEAN MODE) 
 HAVING PossessoreElenco LIKE caoncat(?,'%')

注意在没有聚合函数的情况下使用having子句过滤结果是非常不合适的

因此您可以将主查询用作子查询来应用 eforcemnet

select *
from (
    SELECT 
    ....
    WHERE MATCH(PossessoreElenco) AGAINST( :my_word  IN BOOLEAN MODE) 

) T
WHERE T.PossessoreElenco LIKE concat(:my_word,'%')

你应该避免在 sql 中使用 php var 因为这会产生 sqlijcetion 为了避免 tgis 你可以使用命名参数并使用 Yii2 提供的相关绑定功能