2012-06-27 2 views
0

Я пытаюсь реализовать форму поиска на своем веб-сайте.Как искать текст в codeigniter?

Использование 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. 

Мой поисковый запрос не возвращает результатов, даже если эти ключевые слова присутствуют как в заголовке, так и в содержимом. Как я могу получить свой поисковый запрос, чтобы выбрать ключевые слова в записи базы данных и вернуть результат ???

+0

'взимают плату за project' не появляется в целом в названии, ни содержания. –

+0

aaah .. ok. поэтому, используя подобный, запрос должен отображаться как единое целое. Должен ли запрос каким-либо образом разбиваться на ключевые слова? – hairynuggets

ответ

2

Вы должны разделить переменную 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'); 

Я рекомендую использовать LIKE только с word% для повышения производительности. Код:

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

+0

Спасибо, что я искал, не думаю, что вы знаете, как сортировать результаты по релевантности? Угадайте, что на пути к созданию моей собственной поисковой системы. lol – hairynuggets

+0

Вы должны использовать существующий, например, sphinx: http://sphinxsearch.com/. Построение одного из них займет гораздо больше времени. –

0

использовать эту инструкцию тщательно

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

У вас не хватает, чтобы обеспечить после или перед третьим параметром. По умолчанию он это сделает. % my_string% Прочтите руководство пользователя.

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

+0

hmm .. как я могу заставить его выбирать эти слова в содержании, а не пытаться сопоставить предложение в целом? – hairynuggets

+0

$ this-> db-> like ('title', $ search_query, after); // other до // читайте руководство пользователя или вы не зададите этот вопрос –