【问题标题】:How to search text in codeigniter?如何在codeigniter中搜索文本?
【发布时间】:2012-06-28 22:23:55
【问题描述】:

我正在尝试在我的网站上实现搜索表单。

使用 codeigniter 活动记录和 mysql 在我的模型中执行以下功能:

$search_query = 'charge fees for project';

    function get_search_results($search_query){
            $data = '';

            $this->db->like('title', $search_query);
            $this->db->or_like('content', $search_query);               

            $query = $this->db->get('faq'); 

            foreach ($query->result() as $row) {
                $data[] = array(
                    'id' => $row->id,
                    'category' => $row->category,
                    'sub_category' => $row->sub_category,
                    'title' => $row->title,
                    'content' => $row->content,
                    'date' => $row->date
                );
            }

            return $data;
    }

在我的数据库中,我有一行包含以下数据:

row->title - What fees does the website charge?
row->content - We charges total fees. When your account is successfully project created.

即使标题和内容中都存在这些关键字,我的搜索查询也不会返回任何结果。如何让我的搜索查询在数据库条目中挑选出关键字并返回结果???

【问题讨论】:

  • charge fees for project 不会作为一个整体出现在标题或内容中。
  • 啊啊..好的。所以使用like,查询需要作为一个整体出现。查询是否应该以某种方式拆分为关键字?

标签: mysql codeigniter search activerecord


【解决方案1】:

您应该在运行查询之前拆分search_query 变量:

$search_query_values = explode(' ', $search_query);
$counter = 0;
foreach ($search_query_values as $key => $value) {
    if ($counter == 0) {
        $this->db->like('title', $value);
    }
    else {
        $this->db->or_like('title', $value);
        $this->db->or_like('content', $value);
    }
    $counter++;
}
$query = $this->db->get('faq');

我建议仅将LIKEword% 一起使用以提高性能。代码:

$this->db->like('title', $value, 'after');

【讨论】:

  • 谢谢,这就是我一直在寻找的,难道你不知道如何按相关性对结果进行排序吗?猜猜我正在创建自己的搜索引擎。大声笑
  • 您应该使用现有的,例如 sphinx:sphinxsearch.com。自己建造一个需要更多时间。
【解决方案2】:

谨慎使用此说明

$this->db->like('title', $search_query);

您没有在第三个参数中提供 after 或 before。默认情况下它会这样做。 %my_string% 阅读用户指南。

http://codeigniter.com/user_guide/database/active_record.html

【讨论】:

  • hmm.. 我怎样才能让它挑选出内容中的那些单词而不是尝试匹配整个句子?
  • $this->db->like('title', $search_query , after); // other is before// 请阅读用户指南,否则你不会问这个问题
猜你喜欢
  • 1970-01-01
  • 2016-11-02
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
相关资源
最近更新 更多