我有以下代碼在Laravel 4中搜索我的模型中的搜索短語。它使用'IN BOOLEAN MODE'和MATCH()和AGAINST()。MySQL/PHP布爾全文搜索問題Laravel 4
public function scopeSearch($query, $q)
{
$fields = Static::getFields();
$fields = implode(', ', $fields);
$query->whereRaw("MATCH(" . $fields . ") AGAINST('" . $q . "' IN BOOLEAN MODE)");
}
public static function getFields()
{
$field_names = array();
$disallowed = array('id', 'created_at', 'updated_at', 'deleted_at');
$columns = DB::select('SHOW COLUMNS FROM accounts');
foreach ($columns as $c) {
$field = $c->Field;
if (! in_array($field, $disallowed)) {
$field_names[$field] = $field;
}
}
return $field_names;
}
我想幫助修改上面的代碼,允許用戶搜索使用部分單詞和短語的領域。例如,如果用戶輸入紫色,我希望搜索也能找到包含紫色字詞的電子郵件地址的任何記錄,因此請[email protected]。所以,基本上是部分匹配。
我還希望能夠在字段中找到包含griffon在內的所有類型短語john griffon,即使john不存在。
任何人都可以幫我解決這個問題嗎?乾杯。
不能搜索與FULLTEXT隨機字符串,只有完整的單詞和單詞,XXX開始,如果你使用布爾模式。我不確定爲什麼它在您的情況下區分大小寫,但可能是因爲您在字段上具有區分大小寫的排序規則。 – Vatev
整理是utf8_unicode_ci –
這就是說我將如何更新我的代碼做我想要的然後,任何建議? –