Při pokusu implementovat fulltextové vyhledávání via MySQL InnoDB jsem narazil na problém. Vyhledávání se aplikovalo pouze na jeden sloupec databáze.
Má funkce v modelu, kterou jsem udělal podle návodu od Martina Zlámala vypadá takto:
public function search($search) { $where = ""; //$ft_min_word_len = mysql_result(mysql_query("SHOW VARIABLES LIKE 'ft_min_word_len'"), 0, 1); $ft_min_word_len = 4; preg_match_all("~[\\pL\\pN_]+('[\\pL\\pN_]+)*~u", stripslashes($search), $matches); foreach ($matches[0] as $part) { if (iconv_strlen($part, "utf-8") < $ft_min_word_len) { $regexp = "REGEXP '[[:<:]]" . addslashes(strtoupper($part)) . "[[:>:]]'"; $where .= " OR (title $regexp OR content $regexp)"; } } return $this->database->table('articles') ->where("MATCH(title, content) AGAINST (? IN BOOLEAN MODE)$where", $search) ->order("5 * MATCH(title) AGAINST (?) + MATCH(content) AGAINST (?) DESC", $search, $search) ->limit(50); } |
Řešení:
Problém byl ,že jsem měl nastavené pouze FULLTEXTOVÉ klíče “title” a “content”. Po přidání FULLTEXTOVÉHO klíče “title, content” byl problém vyřešen.