社区
基础编程
帖子详情
搜索算法:我想做一个搜索程序,请大家帮帮我!
cn0cn
2003-11-24 04:41:01
各位朋友大家好:
小弟我想做一个搜索程序,由于自己能力的有限。还请各位朋友多多帮忙!
这个程序我想做成一个带逻辑搜索的、比如:a and abc or aaaad and xxx
就像google、baidu这样的搜索引擎。可以实现多个关键字的搜索。
谢谢大家!
...全文
96
19
打赏
收藏
搜索算法:我想做一个搜索程序,请大家帮帮我!
各位朋友大家好: 小弟我想做一个搜索程序,由于自己能力的有限。还请各位朋友多多帮忙! 这个程序我想做成一个带逻辑搜索的、比如:a and abc or aaaad and xxx 就像google、baidu这样的搜索引擎。可以实现多个关键字的搜索。 谢谢大家!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ysz628
2004-02-17
打赏
举报
回复
两位老大,其他的还算看懂了,能不能解释一下instr()怎么用的?
weiwei6
2004-02-17
打赏
举报
回复
老大
ustb
2004-02-16
打赏
举报
回复
多字段搜索,请大家指正。
/**
* 功能:高级搜索代码
* 编写时间:2003.5.11
* 编写人:偶然
* 变量: $keyword 关键字
* $con 关系,and或or
* $method 模糊或精确
* $field 字段数组
* 返回值:$tmp sql主体
*/
function super_search($keyword,$con,$method,$field)
{
global $tmp;
$keyword = split("[ \t\r\n\,]+",$keyword);
$num_word = count($keyword);//统计关键字个数
$num = count($field);
if($con=="")
{
$con = "OR";
}
if($method=="like")//模糊查找
{
for($i=0; $i<$num; $i++)
{
$i<$num-1?$condition = $con:$condition=NULL;
$tmp.= " {$field[$i]} $method '%".join("%' $con {$field[$i]} $method '%",$keyword)."%' $condition";
}
}
elseif($method=="exact")//精确查找
{
for($i=0; $i<$num; $i++)
{
$i<$num-1?$condition = $con:$condition=NULL;
$tmp.= " instr({$field[$i]},'".join("')!=0 $con instr({$field[$i]},'",$keyword)."')!=0 $condition";
}
}
return $tmp;
}
$fields = array("title","content","intro");
echo super_search("a b c d","AND","exact",$fields);
echo super_search("a b c d","OR","like",$fields);
countstars
2004-02-11
打赏
举报
回复
多个字段怎么办?=_=
应该加上多个字段的功能嘛:D:D
ustb
2004-02-11
打赏
举报
回复
再少占点篇幅:)
/**
* 功能:高级搜索代码
* 编写时间:2003.5.11
* 编写人:偶然
* 变量: $keyword 关键字
* $con 关系,and或or
* $method 模糊或精确
* $field 要查找的字段
* 返回值:$tmp sql主体
*/
function super_search($keyword,$con,$method,$field)
{
$keyword = split("[ \t\r\n\,]+",$keyword);
$num_word = count($keyword);//统计关键字个数
$con==""?$con = "OR":NULL;
$method=="like"?$tmp = " $field $method '%".join("%' $con $field $method '%",$keyword)."%'":($method=="exact"?$tmp = " instr($field,'".join("')!=0 $con instr($field,'",$keyword)."')!=0":NULL);
return $tmp;
}
echo super_search("a b c d","","like","var")."<br>";
echo super_search("a b c d","","exact","var");
ustb
2004-02-11
打赏
举报
回复
:)
精练多了,学习!
xuzuning
2004-02-11
打赏
举报
回复
似可这样简化
<?php
/**
* 功能:高级搜索代码
* 编写时间:2003.5.11
* 编写人:偶然
* 变量: $keyword 关键字
* $con 关系,and或or
* $method 模糊或精确
* $field 要查找的字段
* 返回值:$tmp sql主体
*/
function super_search($keyword,$con,$method,$field)
{
$keyword = split("[ \t\r\n\,]+",$keyword);
$num_word = count($keyword);//统计关键字个数
if($con=="")
{
$con = "OR";
}
if($method=="like")//模糊查找
{
$tmp = " $field $method '%".join("%' $con $field $method '%",$keyword)."%'";
}
elseif($method=="exact")//精确查找
{
$tmp = " instr($field,'".join("')!=0 $con instr($field,'",$keyword)."')!=0";
//或 $tmp = " $field='".join("' $con $field='",$keyword)."'";
}
return $tmp;
}
echo super_search("a b c d","","like","var")."<br>";
echo super_search("a b c d","","exact","var");
?>
无名2018
2004-02-11
打赏
举报
回复
感谢"偶然"大哥:)
小弟佩服的是五体投地:)
ustb
2004-02-11
打赏
举报
回复
非常感谢老大指出这个错误,我修改了一下,敬请指正。
/**
* 功能:高级搜索代码
* 编写时间:2003.5.11
* 编写人:偶然
* 变量: $keyword 关键字
* $con 关系,and或or
* $method 模糊或精确
* $field 要查找的字段
* 返回值:$tmp sql主体
*/
function super_search($keyword,$con,$method,$field)
{
$keyword = eregi_replace("[ \t\r\n\,]+","|",$keyword);
$keyword = explode("|",$keyword);
$num_word = count($keyword);//统计关键字个数
if($con=="")
{
$con = "OR";
}
if($method=="like")//模糊查找
{
if($num_word=="1")
{
$tmp = $field. " LIKE \"%".$keyword[0]."%\" ";
}
elseif($num_word>1)
{
$tmp = "( ";
for($i = 0;$i<$num_word;$i++)
{
if($i==0)
{
$tmp.= $field." LIKE \"%".$keyword[$i]."%\" ";
}
if($i!= 0)
{
$tmp.= $con." ".$field." LIKE \"%".$keyword[$i]."%\" ";
}
}
$tmp.=")";
}
}
elseif($method=="exact")//精确查找
{
if($num_word>"0")
{
$tmp = " instr(".$field.",'".$keyword[0]."')!=0";
$first = "1";
}
if($first=="1")
{
for($n = 1;$n<$num_word;$n++)
{
$tmp.=" ".$con." instr(".$field.",'".$keyword[$n]."')!=0 ";
}
}
}
return $tmp;
}
echo super_search("a b c d","","like","var");
output:( var LIKE "%a%" OR var LIKE "%b%" OR var LIKE "%c%" OR var LIKE "%d%" )
xuzuning
2004-02-11
打赏
举报
回复
与 ustb(偶然) 商榷
函数有点问题吧?
echo super_search("a b c d","","like","var");
结果:
( var LIKE "%a%" OR var LIKE "%b%" )var LIKE "%c%" OR var LIKE "%d%" )
显然是错的
cn0cn
2004-02-11
打赏
举报
回复
up
xinyaoxp
2004-02-11
打赏
举报
回复
收藏
ustb
2003-11-25
打赏
举报
回复
关键字你可以用空白字符或逗号隔开,如果你还想设置更多的分隔标记
改一下这一句,比如想用+来隔开,可以改成这样
$keyword = eregi_replace("[ \t\r\n\,\+]+","|",$keyword);
and或是or在任何情况下都只能有一个出来,默认是or,可以增大匹配几率。
我不明白一个即是0又是1的数是什么,相信你也不知道。
//具体用法:
//比如你可以从表单中得到查询数据:
$keyword = "abc xyz";//关键字
$con = "and";//与
$method = "like";//模糊
$field = "title";//如果你有title字段的话
$tmp = super_search($keyword,$con,$method,$field);
//假设你有一个叫news的表,你想从标题里找到匹配的关键字,下面是SQL
$sql = "select * from news where $tmp";
cn0cn
2003-11-25
打赏
举报
回复
up
arcow
2003-11-25
打赏
举报
回复
收
cn0cn
2003-11-24
打赏
举报
回复
感谢偶然:
小弟我对这个函数没有理解太好:
* 变量: $keyword 关键字 [a b abc ???这样的吗?]
* $con 关系,and或or [只能选一个?]
* $method 模糊或精确 [ok]
* $field 要查找的字段 [ok]
如何使用关键字。它的格式是什么样的? 如果$con只能选择一个的话、那这个函数的意义就不大了。还请您说明一下。谢谢!还有具体的用法。
jxyuhua
2003-11-24
打赏
举报
回复
mark
ustcfrank
2003-11-24
打赏
举报
回复
短小精悍,收了
ustb
2003-11-24
打赏
举报
回复
/**
* 功能:高级搜索代码
* 编写时间:2003.5.11
* 编写人:偶然
* 变量: $keyword 关键字
* $con 关系,and或or
* $method 模糊或精确
* $field 要查找的字段
* 返回值:$tmp sql主体
*/
function super_search($keyword,$con,$method,$field)
{
$keyword = eregi_replace("[ \t\r\n\,]+","|",$keyword);
$keyword = explode("|",$keyword);
$num_word = count($keyword);//统计关键字个数
if($con=="")
{
$con = "OR";
}
if($method=="like")//模糊查找
{
if($num_word=="1")
{
$tmp = $field. " LIKE \"%".$keyword[0]."%\" ";
}
elseif($num_word>1)
{
$tmp = "( ";
for($i = 0;$i<$num_word;$i++)
{
$first = 0;
if($first==0)
{
$tmp.= $field." LIKE \"%".$keyword[$i]."%\" ";
$first = 1;
}
if($first!= 0)
{
$i++;
$tmp.= $con." ".$field." LIKE \"%".$keyword[$i]."%\" ";
}
if(trim($tmp)!= "(")
{
$tmp.= " )";
}
}
}
}
elseif($method=="exact")//精确查找
{
if($num_word>"0")
{
$tmp = " instr(".$field.",'".$keyword[0]."')!=0";
$first = "1";
}
if($first=="1")
{
for($n = 1;$n<$num_word;$n++)
{
$tmp.=" ".$con." instr(".$field.",'".$keyword[$n]."')!=0 ";
}
}
}
return $tmp;
}
c语言九宫格的递归算法,九宫格 数独 求解 算法 栈实现
这是手机上的
一个
游戏《数字九宫格》英文名字叫“Sudoku”,估计大家都玩过!这个游戏对智力是个很大的挑战!我很
想
在两分总之内就能把格子全填上,但是我的脑袋却没有那样的智商,只好写个
程序
让电脑
帮帮我
了!(*^_...
九宫格 数独 求解 算法 栈实现
这是手机上的
一个
游戏《数字九宫格》英文名字叫“Sudoku”,估计大家都玩过!这个游戏对智力是个很大的挑战!我很
想
在两分总之内就能把格子全填上,但是我的脑袋却没有那样的智商,只好写个
程序
让电脑
帮帮我
了!(*^_...
本科计算机/软件工程 新生学习算法?
你是否在纠结要不要开启学习算法?当然,编程本身离不开算法,我的意思是更优秀的算法?我有些疑问,希望有人可以
帮帮我
!
贪心算法
这些是人类用
一个
贪婪的算法代表36美分的步骤,只使用值为{1,5,10,20}的硬币。最高价值的硬币,低于剩余的变化,是局部最优的。(
请
注意,一般来说,变更问题需要动态编程或整数规划才能找到最佳解决方案;但是,...
有没有人能
帮帮我
啊呜呜呜 这个简历目前
一个
大厂的笔试都没接到
想
问一下大家现在大四 六月份毕业
想
毕业旅行之后找份实习但是九月研究生开学有没有可以两个月短期实习的大厂啊 #实习# #实习职位# 简历上实习太短 导致被挂 有一段某国家级实验室的实习两个月,和某BAT实习四个月,...
基础编程
21,891
社区成员
140,342
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章