2017-03-05 56 views
1

提問的藉口,但我試圖做一個使用基於規則的分類算法的搜索系統,但問題是我似乎無法找到如何實現它。找工作的基於規則的分類算法

我有一個想法在我腦海中。首先,使用php select語句生成數據,然後測試與用戶輸入相匹配的所有數據。我是否正確,還是有什麼問題。

回答

0

假設您將根據您的輸入創建您的規則,然後將數據發送到搜索查詢中,無論是在發佈中還是在URL中(首選URL)。你形成了會是這樣的 enter image description here

四個用於在假設規則發送它會造成搜索URL像

enter image description here

您將創建一個搜索功能,這樣的事情

public function search_item($data,$per_page,$offset=0) 
{ 
    $term_q=''; 
    $loc_q=''; 
    $pur_q=''; 
    if($per_page==0) 
    { 
     $limit_q=''; 
    } 
    else 
    { 
     $limit_q='LIMIT '.$offset.','.$per_page; 
    } 

    if($data['keyword']!='') 
    {$term_q='AND (property.title LIKE "%'.addslashes($data['keyword']).'%" OR property.description LIKE "%'.addslashes($data['keyword']).'%" OR property.city LIKE "%'.addslashes($data['keyword']).'%") ';} 
    if($data['location']!='') 
    { 
     $loc_q=' AND (property.location LIKE "%'.addslashes($data['location']).'%" OR property.title LIKE "%'.addslashes($data['location']).'%" OR property.description LIKE "%'.addslashes($data['location']).'%" OR property.city LIKE "%'.addslashes($data['location']).'%") '; 
    } 
    if($data['purpose']!='') 
    { 
     $pur_q=' AND property.purpose LIKE "%'.addslashes($data['purpose']).'%" '; 
    } 
    $data=$this->db->query("SELECT property.*, users.name as posted_by, property_types.name as property_type 
         from property 
         inner join users on users.id=property.posted_by 
         inner join property_types on property_types.id=property.type 

         WHERE property.status='approved' 
         {$term_q} 
         {$loc_q} 
         {$pur_q} 
         {$limit_q} 
         ")->result_array(); 
    //print_r($this->db->last_query());exit; 
    for($i=0;$i<count($data);$i++) 
    { 
     $data[$i]['images']=$this->db->query('SELECT * from property_images WHERE property_images.property_id='.$data[$i]['id'])->result_array(); 
    } 

    return $data; 
    //return $this->db->last_query(); 
} 

完全介意語法,它在Codeigniter框架中,但我會向您解釋它。函數中的數據參數是您從URL獲得的內容,發送到從$ _REQUEST獲取的此函數。 $ per_page和$ offset用於分頁。

現在,搜索算法不過是一個大的SELECT查詢,它帶有大量的小子句,它們定義了基於哪些規則對數據進行過濾。如果你看到的功能

$term_q=''; 
$loc_q=''; 
$pur_q=''; 
if($per_page==0) 
{ 
    $limit_q=''; 
} 
else 
{ 
    $limit_q='LIMIT '.$offset.','.$per_page; 
} 

if($data['keyword']!='') 
{$term_q='AND (property.title LIKE "%'.addslashes($data['keyword']).'%" OR property.description LIKE "%'.addslashes($data['keyword']).'%" OR property.city LIKE "%'.addslashes($data['keyword']).'%") ';} 
if($data['location']!='') 
{ 
    $loc_q=' AND (property.location LIKE "%'.addslashes($data['location']).'%" OR property.title LIKE "%'.addslashes($data['location']).'%" OR property.description LIKE "%'.addslashes($data['location']).'%" OR property.city LIKE "%'.addslashes($data['location']).'%") '; 
} 
if($data['purpose']!='') 
{ 
    $pur_q=' AND property.purpose LIKE "%'.addslashes($data['purpose']).'%" '; 
} 

上面的部分是定義所有的規則,然後嵌入到主要查詢獲取過濾數據。所以你看到它很容易,你所要做的就是定義你的規則。通過某種形式或通過自己發送它們來獲取它們,然後處理這些規則以創建查詢,最後執行該查詢以從數據庫中獲取結果。

+0

是的,我試圖建議通過sql搜索數據,但我的顧問說我應該堅持算法,所以我認爲這個想法是錯誤的......我不知道也許這只是我。 –