查看: 1176|回复: 11
|
类似google的search engine (database design)
[复制链接]
|
|
想请教大家如果我要像google那样只provide一个textbox来search info
比如说我的product有下列的keywords
state = kl
specialist = sea food
type = restaurant
name = ah ben restaurant
那么我在那唯一的textbox type " kl sea food restaurant "
就能显示出ah ben restaurant 这个record...
希望大家给我一点建议该如何design这样的database and system |
|
|
|
|
|
|
|
发表于 9-8-2006 01:14 PM
|
显示全部楼层
为什么你不先把你想出来的DATABASE DESIGN放出来,然后再讨论?这样对你有好处的。。 |
|
|
|
|
|
|
|
楼主 |
发表于 9-8-2006 01:34 PM
|
显示全部楼层
好的!
我的database design 如下:
PID , Name, Specialist, State, Type
P101 , HK restaurant, Dim Sum, Selangor , Restaurant
P102 , Ah Mei Dai Chao, Noodle, KL , Stall
P103 , Wong Kok Enterprise, Rice, Selangor , Supplier
以前我有几个textbox.. 每一个textbox都对应特定的data field.. 所以search完全不是问题。。。
但现在我要如何只用一个textbox就能做到几个textbox的效果呢? |
|
|
|
|
|
|
|
发表于 9-8-2006 03:15 PM
|
显示全部楼层
OK,我没有做过SEARCH ENGINE的经验,但想了一想,这方法也可以,我把你给的资料开了一个TABLE来测试,然后证明可以但"不一定是好方法",毕竟是用10分钟想做出来的,还有更好的方法。。但比较难。。以下的是非常简单的,如果哪位还有好的方法也可以分享
STEP 1:
用空格,+,-,","等来SPLIT你的SEARCH STRING,
STEP 2:
然后用LOOP,如果你的STRING有4个WORDS,那就LOOP4次。
STEP 3:
在LOOP里面你要把你的TABLE FIELD LOAD出来,然后还要GENERATE SQL STATEMENT
所以如果你SEARCH "KL"的话,那SQLSTATEMENT就是酱
SELECT b.PID,b.Name,b.Specialist,b.State,b.Type FROM (
SELECT * FROM Search WHERE State Like '%kl%' UNION ALL
SELECT * FROM Search WHERE Specialist Like '%kl%' UNION ALL
SELECT * FROM Search WHERE Name Like '%kl%' UNION ALL
SELECT * FROM Search WHERE Type Like '%kl%') b
Group By b.PID,b.Name,b.Specialist,b.State,b.Type
所以如果你SEARCH "KL NOODLE"的话,那SQLSTATEMENT就是酱
SELECT b.PID,b.Name,b.Specialist,b.State,b.Type FROM (
SELECT * FROM Search WHERE State Like '%kl%' UNION ALL
SELECT * FROM Search WHERE Specialist Like '%kl%' UNION ALL
SELECT * FROM Search WHERE Name Like '%kl%' UNION ALL
SELECT * FROM Search WHERE Type Like '%kl%' UNION ALL
SELECT * FROM Search WHERE State Like '%Noodle%' UNION ALL
SELECT * FROM Search WHERE Specialist Like '%Noodle%' UNION ALL
SELECT * FROM Search WHERE Name Like '%Noodle%' UNION ALL
SELECT * FROM Search WHERE Type Like '%Noodle%') b
Group By b.PID,b.Name,b.Specialist,b.State,b.Type
()里面的SQL 是要用CODING来GENERATE的。。
其他的你要自己学习想了。。我已经写好一个PHP的EXAMPLE了。
在给你一个TIPS
$arKeyword = split(" ", trim($sSearch));<---这里可以split你的string
foreach ($arKeyword as $sKeyword)
{
$sSrch .= "(" . SearchSQL($sKeyword) . ") " . XXXX . " ";<---这里generate 你的SQL
}
[ 本帖最后由 max5007 于 9-8-2006 03:21 PM 编辑 ] |
|
|
|
|
|
|
|
楼主 |
发表于 9-8-2006 03:39 PM
|
显示全部楼层
谢谢! 我明白你建议给我的logic.. 嗯。。 是行的通,但应该有其他方法,
让我再想想看有没有更好的方法,再post 上来给大家看看。。 |
|
|
|
|
|
|
|
发表于 9-8-2006 04:24 PM
|
显示全部楼层
原帖由 counterking 于 9-8-2006 03:39 PM 发表
谢谢! 我明白你建议给我的logic.. 嗯。。 是行的通,但应该有其他方法,
让我再想想看有没有更好的方法,再post 上来给大家看看。。
是有的。。但没有时间想。。因为要工作哈哈,但是RESEARCH也是我的工作之一 |
|
|
|
|
|
|
|
发表于 9-8-2006 05:06 PM
|
显示全部楼层
呵呵,有看到有意思的帖 ^^ 关注
据小章鱼了解, google 的搜索引擎已经有很赞的 AI
比方你搜 Java Coffee 它会推敲你在找咖啡而不是 java 平台与咖啡,
所以会优先给你有关咖啡的资料。
顺便谢谢max 看到小小的技巧 |
|
|
|
|
|
|
|
楼主 |
发表于 9-8-2006 05:28 PM
|
显示全部楼层
好有兴趣知道更多关于google搜索引擎AI的东西,虽然我想做的不用那么劲,但也许可以启发我的思维
[ 本帖最后由 counterking 于 9-8-2006 05:30 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 9-8-2006 05:45 PM
|
显示全部楼层
当然不能和GOOGLE比,他们用了很多时间和人力开发出来的,而这方法是我用10分钟想出来的笨方法当然不能比。。。 |
|
|
|
|
|
|
|
楼主 |
发表于 9-8-2006 08:56 PM
|
显示全部楼层
哈哈。。 不说是笨蛋方法拉,起码算是其中一个"solution"
[ 本帖最后由 counterking 于 10-8-2006 08:14 PM 编辑 ] |
|
|
|
|
|
|
|
楼主 |
发表于 10-8-2006 08:16 PM
|
显示全部楼层
想请问下。。 还有其他方法可以做到这个要求吗?
database不一定要跟我一样design... |
|
|
|
|
|
|
|
发表于 11-8-2006 12:11 AM
|
显示全部楼层
原帖由 max5007 于 9-8-2006 05:45 PM 发表
当然不能和GOOGLE比,他们用了很多时间和人力开发出来的,而这方法是我用10分钟想出来的笨方法当然不能比。。。
PROGRAMMING 没有笨与不笨啦。。表酱谦。。。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|