【问题标题】:full text search in codeigniter在 codeigniter 中进行全文搜索
【发布时间】:2014-06-05 07:52:36
【问题描述】:

我有一个使用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();

【问题讨论】:

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


    【解决方案1】:
    1. 如果您使用 mysql 版本 5.5 或更低版本,请确保所有涉及的表都具有引擎 MyISAM
    2. 确保您的列具有全文索引
    3. where() 接受 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 .'")')
      

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          如果你有多个列,你可以像这样在单行中使用它们:

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

          或只有一列:

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

          不要忘记转义您的输入。因为我们在那边用那个 false 禁用了转义。使用它进行转义:

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

          【讨论】:

            猜你喜欢
            • 2012-08-27
            • 1970-01-01
            • 2020-05-06
            • 2011-11-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-07-29
            • 2012-12-29
            相关资源
            最近更新 更多