询问的借口,但我试图使用基于规则的分类算法来制作搜索系统,但问题是我似乎无法找到如何实现它。
我脑子里有个主意。首先,使用php select语句生成数据,然后测试所有数据是否与用户的输入匹配。我是否正确,或者有什么不对劲。
答案 0 :(得分:0)
假设您要根据输入创建规则,然后以邮寄或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框架中重写语法,但我会向你解释。函数中的data参数是从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']).'%" ';
}
上面的部分定义了所有规则,然后嵌入主查询中以获取过滤后的数据。所以你看到它非常简单,你所要做的就是定义你的规则。通过某种形式或通过自己发送它们来获取它们,然后处理这些规则以创建查询,最后执行该查询以从数据库中获取结果。