2010-01-03 112 views
7

對於使用MySQL數據庫的Cakephp應用程序進行基於文本的搜索的哪個實現是「最好的」?CakePHP搜索MySQL

回答

0

我總是傾向於做一個「搜索」的模式,「SearchesController」和意見,然後寫我自己的自定義腳本中使用搜索我的數據庫,

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

,我不知道有任何「最佳」的搜索,但可能有組件和插件會爲你做這樣的事情。最好先檢查麪包店http://bakery.cakephp.org/

1

斯芬克斯是最強大的SQL文本的搜索引擎之一 - http://sphinxsearch.com/

有在麪包店寫了一個CakePHP的行爲: http://bakery.cakephp.org/articles/view/sphinx-behavior

要注意的一點是, Sphinx有幾個組件,有些需要在你的機器上作爲守護進程運行(類似於運行apache或mysql進程)。此外,您需要每隔一段時間對數據庫進行「索引」,以保持結果的新鮮度。起初設置起來可能令人望而生畏,但如果您有大量記錄和大量文本搜索,絕對值得您付出努力。

7

我是如何實現的帖子搜索:

搜索表單代碼:

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

在Controller中,把下面的查詢功能:

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

視圖代碼:

<?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; ?> 

可能不是最好的/優雅的,但適用於簡單的查詢。

+1

除非您有複雜的搜索需求,否則這是最好的選擇。 – 2012-06-10 22:20:15