Проблема, с которой сталкивается codeigniter при поиске нескольких слов

#php #codeigniter #full-text-search

#php #codeigniter #полнотекстовый поиск

Вопрос:

Я создаю поиск CodeIgniter для своего проекта книжного магазина. Это нормально при поиске по одному слову, но я сталкиваюсь с проблемой при поиске по нескольким словам. Как я могу решить эту проблему.

МОЙ контроллер

 public function search()
{
    /*=== LOAD DYNAMIC CATAGORY ===*/
    $this->load->model('admin_model');
    $view['category'] = $this->admin_model->get_category();
    /*==============================*/


    $this->form_validation->set_rules('search_book', "Search",'required');

    if($this->form_validation->run() == FALSE)
    {
        #...Redirected same page after action
        redirect($_SERVER['HTTP_REFERER']);
    }
    else
    {
        $query = $this->input->post('search_book');

        $this->load->model('user_model');
        $view['books'] = $this->user_model->search($query);


        $view['user_view'] = "users/search_books";
        $this->load->view('layouts/user_layout', $view);
    }

}
 

МОЯ модель

 public function search($query)
{
    $this->db->order_by('id', 'DESC');
    $this->db->from('books');
    $this->db->like('book_name', $query);
    $this->db->where('status', 1);
    $q = $this->db->get();
    return $q->result();
}
 

Например, если я напишу PHP в своем окне поиска, он отобразит все мои книги, в названии которых есть слово PHP. Для меня это нормально.

но когда я пишу КНИГИ по PHP в своем окне поиска, он показывает, что книга не найдена.

Я хочу, чтобы он показывал результат, если какое-либо слово совпадает.

Комментарии:

1. PHP BOOKS Можем ли мы получить пример строки, по которой вы ищете?

2. ваш like запрос предложения в поиске может выглядеть следующим образом $this->db-like('book_name', '%'.$query.'%'

3. @RahulMeshram против строки запроса $.

4. пример строки I означает, PHP PHP PHP или BOOKS BOOKS BOOKS или PHP BOOKS PHP , вы меня поняли?

5. @RahulMeshram хорошо, я понял вашу точку зрения. нет названия книги, подобного php books. чего я хочу, так это того, что если я напишу книгу по php, она принесет мне эти книги с именем php. sample string PHP и Mysql . это название книги в моей базе данных.

Ответ №1:

Вы можете заменить это

 $this->db->like('book_name', $query);
 

при условии, что

 $str = str_replace(" ","|", $query);
$this->db->where("book_name rlike '$str'");
 

Вы можете получить более подробную информацию о rlike здесь.

Вот лучшая справка по полнотекстовому поиску, предоставленная для вашей справки.

Комментарии:

1. Большое спасибо, брат! Это устраняет мою проблему. @RahulMeshram