2010-01-03 11 views

Respuesta

0

siempre tendía a hacer un modelo 'Buscar', 'SearchesController' y puntos de vista, a continuación, escribir mi propio script personalizado para buscar mi base de datos usando,

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

No estoy al tanto de cualquier "mejor" de búsqueda , pero bien puede haber componentes y complementos que hagan algo como esto para ti. Mejor para comprobar la panadería http://bakery.cakephp.org/

1

Sphinx es uno de los más poderosos motores de búsqueda de texto de SQL - http://sphinxsearch.com/

Hay un comportamiento CakePHP redactado en la panadería: http://bakery.cakephp.org/articles/view/sphinx-behavior

Lo que hay que destacar es que Sphinx tiene varios componentes y algunos necesitan ejecutarse como daemons en su máquina (similar a ejecutar procesos apache o mysql). También necesita "indexar" su base de datos de vez en cuando para mantener los resultados actualizados. Puede ser desalentador configurarlo al principio, pero definitivamente vale la pena si tienes muchos registros y grandes fragmentos de texto para buscar.

7

Cómo he implementado Buscar Mensajes:

El código de búsqueda:

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

en el controlador, puso la siguiente función de Búsqueda:

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)); 
    } 
} 

El código de la 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; ?> 

Puede que no sea el mejor/elegante, pero funciona bien para consultas simples.

+1

A menos que tenga necesidades de búsqueda complejas, esta es la mejor ruta para tomar. –