Laravel raw FULLTEXT查询类似于Facebook Search

时间:2014-01-14 03:31:01

标签: php mysql laravel

我正在构建一个类似于Laravel 4.1中的Facebook的AJAX搜索功能。搜索字段应针对usersfirst_namelast_name搜索email表。

我可以输入以下任何条款或部分条款,例如:

  • 贾里德
  • Eitnier
  • Jared Eitnier
  • jeitnier@domain.com
  • JA
  • jeit
  • eitn

首先我尝试了:

User::where('email', 'LIKE', $search)
  ->orWhere('first_name', 'LIKE', $search)
  ->orWhere('last_name', 'LIKE', $search)
  ->get();

但这只是其中一个词的匹配。然后我试图通过空格爆炸输入并构建一个这样的查询:

User::whereRaw("MATCH (first_name, last_name, email)
                AGAINST ('$explode[0]' IN BOOLEAN MODE)
                AND MATCH (first_name, last_name, email)
                AGAINST ('$explode[1]' IN BOOLEAN MODE)")
     ->get();

有效,但只能获得完全匹配('jared','eitnier'或'jared eitnier')

我需要更改哪些内容才能获得LIKE次匹配,但输入的任何条款组合都会被

1 个答案:

答案 0 :(得分:5)

我能够在this post的帮助下解决这个问题。这是最终的代码:

$input = Input::get('input');

$exp = explode(' ', $input);

$s = '';
$c = 1;
foreach ($exp AS $e)
{
    $s .= "+$e*";

    if ($c + 1 == count($exp))
        $s .= ' ';

    $c++;
}

$query = "MATCH (first_name, last_name, email) AGAINST ('$s' IN BOOLEAN MODE)";
// $query looks like 
// MATCH (first_name, last_name, email) AGAINST ('+jar* +eitni*' IN BOOLEAN MODE)

$users = User::whereRaw($query)->get();