2010-01-03 14 views
7

Quale implementazione di una ricerca basata su testo per un'applicazione Cakephp che utilizza un database MySQL è "migliore"?Cakephp Cerca MySQL

risposta

0

ho sempre avuto la tendenza a fare un 'Cerca' modello 'SearchesController' e vista, quindi scrivere il mio script personalizzato per cercare il mio database utilizzando,

$this->Search->query("SELECT * FROM table WHERE condition 1 AND condition 2"); 

Non sono a conoscenza di alcun "migliore" di ricerca , ma potrebbero esserci componenti e plugin che faranno qualcosa del genere per te. Meglio controllare il Bakery http://bakery.cakephp.org/

1

Sfinge è uno dei più potenti motori di ricerca di testo SQL - http://sphinxsearch.com/

C'è un comportamento CakePHP redatto al panificio: http://bakery.cakephp.org/articles/view/sphinx-behavior

La cosa da notare è che Sphinx ha diversi componenti e alcuni devono essere eseguiti come demoni sul tuo computer (in modo simile ai processi Apache o MySQL in esecuzione). Inoltre è necessario "indicizzare" il proprio database ogni tanto per mantenere i risultati freschi. All'inizio può essere scoraggiante, ma sicuramente vale la pena se si hanno molti record e grossi pezzi di testo da cercare.

7

Come ho implementato Cerca Messaggi:

Il codice modulo di ricerca:

<?php 
echo $form->create('Deal',array('action' => 'search')); 
echo $form->input('Deal.search'); 
echo $form->end('Search'); 
?> 

Nel Controller, ha messo la seguente funzione di ricerca:

function search() 
{ 
    if (!empty($this->data)) { 
     $searchstr = $this->data['Post']['search']; 
     $this->set('searchstring', $this->data['Post']['search']); 
     $conditions = array(
      'conditions' => array(
      'or' => array(
       "Post.title LIKE" => "%$searchstr%", 
       "Post.description LIKE" => "%$searchstr%" 
      ) 
      ) 
     ); 
     $this->set('posts', $this->Post->find('all', $conditions)); 
    } 
} 

Il codice della vista:

<?php foreach ($posts as $post): ?> 
    <tr> 
     <td><?php echo $post['Post']['id']; ?></td> 
     <td> 
      <?php echo 
$html->link($post['Post']['title'],'/posts/view/'.$post['Post']['id']);?> 
       </td> 
     <td><?php echo $post['Post']['created']; ?></td> 
    </tr> 
<?php endforeach; ?> 

Potrebbe non essere il migliore/elegante, ma funziona bene per le query semplici.

+1

A meno che non si abbiano esigenze di ricerca complesse, questa è la soluzione migliore da seguire. –