我在 Laravel 4 中实现了以下关键字搜索:
// Search by keyword(s)
if(Input::get('keyword'))
{
$search = Input::get('keyword');
$searchTerms = explode(' ', $search);
$fields = array(
'resources.name',
'resources.description',
'resources.website',
'resources.additional_info');
$query->where(function($query) use ($searchTerms, $fields) {
foreach ($searchTerms as $term)
{
foreach ($fields as $field)
{
$query->orWhere($field, 'LIKE', '%'. $term .'%');
}
}
});
}
问题:假设我的表中有两个资源,一个带有 name foo
,一个带有 name bar
,一个带有 name foo bar
。它们是按顺序创建并放入我的表中的。现在,如果我搜索“foo bar”,我得到的前两个结果将是foo
and bar
(因为它们在我的表中是第一个匹配 foo 或 bar),我的第三个结果将是foo bar
. 如何进行此搜索,以便根据匹配的关键字数量对结果进行排序?所以foo bar
将是第一个结果。