1
提問的藉口,但我試圖做一個使用基於規則的分類算法的搜索系統,但問題是我似乎無法找到如何實現它。找工作的基於規則的分類算法
我有一個想法在我腦海中。首先,使用php select語句生成數據,然後測試與用戶輸入相匹配的所有數據。我是否正確,還是有什麼問題。
提問的藉口,但我試圖做一個使用基於規則的分類算法的搜索系統,但問題是我似乎無法找到如何實現它。找工作的基於規則的分類算法
我有一個想法在我腦海中。首先,使用php select語句生成數據,然後測試與用戶輸入相匹配的所有數據。我是否正確,還是有什麼問題。
假設您將根據您的輸入創建您的規則,然後將數據發送到搜索查詢中,無論是在發佈中還是在URL中(首選URL)。你形成了會是這樣的
四個用於在假設規則發送它會造成搜索URL像
您將創建一個搜索功能,這樣的事情
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']).'%" ';
}
上面的部分是定義所有的規則,然後嵌入到主要查詢獲取過濾數據。所以你看到它很容易,你所要做的就是定義你的規則。通過某種形式或通過自己發送它們來獲取它們,然後處理這些規則以創建查詢,最後執行該查詢以從數據庫中獲取結果。
是的,我試圖建議通過sql搜索數據,但我的顧問說我應該堅持算法,所以我認爲這個想法是錯誤的......我不知道也許這只是我。 –