佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1176|回复: 11

类似google的search engine (database design)

[复制链接]
发表于 9-8-2006 12:00 PM | 显示全部楼层 |阅读模式
想请教大家如果我要像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
回复

使用道具 举报


ADVERTISEMENT

发表于 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也是我的工作之一
回复

使用道具 举报

Follow Us
发表于 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 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 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 没有笨与不笨啦。。表酱谦。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 14-11-2024 01:51 AM , Processed in 0.127584 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表