Problém fulltextovým vyhledáváním

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.

2 thoughts on “Problém fulltextovým vyhledáváním”

  1. Jsem rád, že to někomu pomohlo. Martin to v článku sice píše, ale není na to kladen důraz a mě to celkem nějakou dobu trvalo než jsem na to přišel.

Comments are closed.