在codeigniter中进行全文搜索

时间:2014-04-21 09:06:46

标签: codeigniter search full-text-search sql-like

我有一个查询用于搜索关键字,但我也想搜索全文,所以我将其更改为全文搜索查询,但它不起作用。

旧查询工作正常:

$data = $this->db
    ->select('content.title,content.id,content.category,content.body,path')
    ->from('content')   
    ->join('categories','content.category = categories.id')             
    ->like('content.title', $searchterm)
    ->like('content.body', $searchterm)
    ->order_by("content.id","DESC")
    ->get();

这是我对全文搜索的新查询:

$data = $this->db
    ->select('content.title,content.id,content.category,content.body,path')
    ->from('content')   
    ->join('categories','content.category = categories.id')                 
    ->where('MATCH (content.body, content.title) AGAINST ("'. $searchterm .'")')
    ->order_by("content.id","DESC")
    ->get();

4 个答案:

答案 0 :(得分:3)

  1. 如果您使用的是mysql 5.5或更低版本,请确保所涉及的所有表都具有引擎 MyISAM
  2. 确保您的列中包含 FULLTEXT INDEX
  3. 其中()有3个参数,例如:

    $this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE);
    $this->db->get('table');  
    
  4. match()中的多个列触发错误号码:1191,因此将它们分开:

    ->where('MATCH (content.title) AGAINST ("'. $searchterm .'")')
    ->where('MATCH (content.body) AGAINST ("'. $searchterm .'")')
    

答案 1 :(得分:0)

尝试更改查询中的where子句,看看是否有帮助:

->where('MATCH (content.body, content.title) AGAINST ("'. $searchterm .'")', NULL, false)

这会将值设置为NULL并告诉CI不要转义字符串。

答案 2 :(得分:0)

你没有使用正确的mathch ....语法 试试这个:

    ->where MATCH (content.body, content.title) AGAINST ("'. $searchterm .'") > 0

答案 3 :(得分:0)

如果您有多列,则可以像这样在一行中使用它们:

->where("MATCH(title, model) AGAINST('$text')", null, false);

或仅一列:

->where("MATCH(title) AGAINST('$text')", null, false);

不要忘记转义您的输入。因为我们禁止在那边用假冒来逃避。使用它进行转义:

$text = $this->db->escape_str($text);