新西兰天维网社区

 找回密码
登录  注册
搜索
热搜: 移民 留学
查看: 434|回复: 28
打印 上一主题 下一主题

[工作] 斗胆问个关于搜索引擎类网站的问题,没有头绪请给个建议,谢谢请斑竹不要删啊 [复制链接]

Rank: 10Rank: 10Rank: 10

升级  62.8%

UID
270938
热情
1543
人气
2660
主题
81
帖子
1557
精华
0
积分
2942
阅读权限
30
注册时间
2010-12-29
跳转到指定楼层
楼主
发表于 2014-4-11 09:52:16 |只看该作者 |正序浏览 微信分享
谢谢斑竹别别删啊,换个角度看,我的问题和大多数的帖子形式上是一样的,只是内容不一样的。

在这里问感觉sky里面这个版块是问这个问题最好的地方。stackoverflow虽好,但这不是代码问题,怕英文意思表达不好,费半天劲也说不清楚
-----------------------------------------------------------------------------------------------------------------------

是一个关于学校的搜索网站,关于学生和课程设置的各种问题。ASP.NET和SQL SERVER, 试图用full text search(不知道行不行)

现在建了2个数据库,一个是关于问题,答案,问题的category的
我把问题和答案存在一个表里面,答案可以null。实际上主要是存储那种straight forward 问题,也就是那种一个问题对于一个答案的情况,比如where can I find student support? 这种答案是固定的,答案可以是一个building number和一些介绍和联系方式。。

另一个就是关于课程,学生,教师,prerequisite, enrollment。。。等等的数据库

目前应该有2种类型的问题,一种问题是那种直接的问题就像刚才的例子,我考虑就用select * from QnS where Q like 或 contains()text box 里面的关键字,比如用户搜索有个student support关键字,就搜索所有的Q field里面有student support的record,然后把对应的Answer 显示出来。
不知道我这种方法是否可行正确,如果可行的话,有个问题,用户提问的方式各种各样,比如刚才的问题where can I find student support, how can I find student support? where is student support?...各种各样的问题,而我只要提取student support这个关键字,那么我如何才能提取到我需要的关键字而且过滤掉text box里面不需要的字?

另一种类型的问题是需要进入学生数据库执行一些query进行些判断才能给出答案。这种问题的答案的那个field是null的。 比如 Can I enroll into Web Development? 现在要这个学生登录后查看他通过的那些课程,再判断Web Development的prerequisite 然后再给出答案来可以。
实际这种问题我感觉只能存储前半部Can I enroll..?加上课程名?因为假如有200个课程,我总不可能都存进数据库。假如像我说的这样进行,我如何能判断用户的问题?这里一个问题里面有2个关键字,enroll关键字在 Q表里面,Web Development关键字在course里面,而且这2个表没有任何连带关系。我没法用LIKE或CONTAINS呀。。。那我怎么才能知道用户问的什么问题呢?
比如获得了enroll的关键字,然后如何才能从text box里面获得course name?

假使我分别获得了用户的enroll 和 course name的关键字了,application如何才能知道一遇到enroll关键字就要去查学生通过的那些课程,然后再去查他要上的课程的prerequisite。我总不能在代码里面手敲(if text box的input包含enroll 的话)就执行这个方法,假如我有3百种类似这种的问题,总不能我写300个 if text box包含。。。就运行这个query??

不知道我表述的是否清楚,anyways, 针对我刚此的几个问题给点建议吧,我应该用什么方式解决呢?

另外之前听人说用 sharepoint还是silverlight的power BI可以是这个功能。。。这个是什么?

或者其他的用什么方式实现呢?

非常感激了

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  62.8%

UID
270938
热情
1543
人气
2660
主题
81
帖子
1557
精华
0
积分
2942
阅读权限
30
注册时间
2010-12-29
29#分享本帖地址
发表于 2014-4-12 22:12:57 |只看该作者 微信分享
csamzhou 发表于 2014-4-11 10:36
第一点意思是说,例如用户输入“where can I find student support",你就把这句话的每一个字都去databas ...

这样搜的话我想,假如我有很多个其他的一样关键字的问题。先搜索where的话,假如有10几个都是where 的问题也许我的问题要到第二页才能显示出来了。 不知道我这么想对不对?

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  62.8%

UID
270938
热情
1543
人气
2660
主题
81
帖子
1557
精华
0
积分
2942
阅读权限
30
注册时间
2010-12-29
28#分享本帖地址
发表于 2014-4-12 21:59:00 |只看该作者 微信分享
webgenius 发表于 2014-4-11 14:52
就你这个问题来说吧,如果是每个学生答案都不一样。那说明答案是动态的,既然是动态的东西就不要放数据库 ...


我想只是把某些问题的答案存到数据库里面,比如有个问题 “Can I bring my baby to the class?” 答案是 yes。。。之类的。这个答案我不可能从现有数据库里面提取出来,即使现存的某个数据库里面有这个答案,我估计也没有access的权限。

再比如summer school 最多可以读几个paper。答案可能存在了现有数据库里面,但是我没有access的权限。于是我就直接把他hardcode尽量吧。。。

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  62.8%

UID
270938
热情
1543
人气
2660
主题
81
帖子
1557
精华
0
积分
2942
阅读权限
30
注册时间
2010-12-29
27#分享本帖地址
发表于 2014-4-12 21:56:15 |只看该作者 微信分享
MSSA 发表于 2014-4-12 01:09
实在没法忍不住不说,你的这个设计真是太搞笑了。

你为什么要把question和answer hardcode到database? ...

谢谢你的建议,存information,每个information给tag。
能稍微具体点么?

你的意思也是建table么?information具体指什么,是“答案”么?

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  62.8%

UID
270938
热情
1543
人气
2660
主题
81
帖子
1557
精华
0
积分
2942
阅读权限
30
注册时间
2010-12-29
26#分享本帖地址
发表于 2014-4-12 21:49:24 |只看该作者 微信分享
MSSA 发表于 2014-4-12 01:09
实在没法忍不住不说,你的这个设计真是太搞笑了。

你为什么要把question和answer hardcode到database? ...

我想只是把某些问题的答案存到数据库里面,比如有个问题 “Can I bring my baby to the class?” 答案是 yes。。。之类的。这个答案我不可能从现有数据库里面提取出来,即使现存的某个数据库里面有这个答案,我估计也没有access的权限。

再比如summer school 最多可以读几个paper。答案可能存在了现有数据库里面,但是我没有access的权限。于是我就直接把他hardcode尽量吧。。。

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  37.4%

UID
99702
热情
1074
人气
2395
主题
61
帖子
1506
精华
3
积分
2561
阅读权限
30
注册时间
2006-12-5

哈卡一族

25#分享本帖地址
发表于 2014-4-12 12:14:41 来自手机 |只看该作者 微信分享
不知道怎么给建议因为没有具体的spec。而且中文术语太多看着无比累。
但是楼上说的很好:这设计很扯。哪有把answer存DB里的?某楼说得很有道理:数据库是存“数据”的,你要自己提取数据来整合出“信息”。

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

升级  93.16%

UID
343013
热情
8388
人气
10141
主题
34
帖子
653
精华
0
积分
9658
阅读权限
30
注册时间
2012-9-20

新时政

24#分享本帖地址
发表于 2014-4-12 02:09:56 |只看该作者 微信分享
本帖最后由 MSSA 于 2014-4-12 01:11 编辑
tribbianidan 发表于 2014-4-11 13:39
我意思表达错了,一个数据库,有几个表示关于问题‘答案的,其他的的表是关于学生和课程。。等详情的。
...

实在没法忍不住不说,你的这个设计真是太搞笑了。

你为什么要把question和answer hardcode到database?
既然都是hardcode的,那为何不贴一个FAQ不就完了 - 把所有问题答案列出来不就完了?

如果要想支持dynamic的话那更没必要将question/answer存在database里面了,你直接存information然后每个information给几个tag,然后用搜索的keyword match tag把相应的结果列出来不就ok了?

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

升级  93.16%

UID
343013
热情
8388
人气
10141
主题
34
帖子
653
精华
0
积分
9658
阅读权限
30
注册时间
2012-9-20

新时政

23#分享本帖地址
发表于 2014-4-12 01:42:56 |只看该作者 微信分享
大概粗略看了一下,

你这个东西如果往难里说,需要text analytic / natural language processing, 你说的第二种问题,如果要想比较好的解决方案 你需要Sentiment analysis  - 这些都是比较难的tasks。 .net不太清楚,java有一些open source的framework可以做这个。btw,你做的这个东西应该不需要用到这个级别的implementation。

个人觉得你的这个整个design本身就有问题,你把你要解决的事情over complicated,一个学校的网站需要用这么智能的搜索吗?你的那种requirement恐怕连google这样的都没法完美解决。

你应该重新审视你的business requirement然后重新设计你的系统,你可以参考一下奥大的课程搜索。
一般这类的网站都是一些固定的link(一些predefine和的question/answer)加一个generic的search bar, search返回的结果就是所有和关键词match的数据 - 这里可以用sql like 也可以用free text search.

如果实在还解决不了,建议发到stackoverflow上。

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  62.8%

UID
270938
热情
1543
人气
2660
主题
81
帖子
1557
精华
0
积分
2942
阅读权限
30
注册时间
2010-12-29
22#分享本帖地址
发表于 2014-4-11 20:49:35 |只看该作者 微信分享
John.G 发表于 2014-4-11 16:32
C:\作为web路径有点Web常识吗?

没有,以为这样是把C盘图片上传上来呢

使用道具 举报

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

升级  38.92%

UID
10042
热情
18463
人气
22000
主题
38
帖子
14519
精华
0
积分
27784
阅读权限
30
注册时间
2004-12-28

至尊荣耀 最强王者 永恒钻石 尊贵铂金 元老勋章 10周年纪念

21#分享本帖地址
发表于 2014-4-11 17:32:38 来自手机 |只看该作者 微信分享
tribbianidan 发表于 2014-4-11 10:20
你的第二点, 我的prerequisite的table,是这样的(courseid,prerequisiteid(也是reference course id),p ...

C:\作为web路径有点Web常识吗?

使用道具 举报

Rank: 12Rank: 12Rank: 12

升级  85.8%

UID
279905
热情
3666
人气
5510
主题
27
帖子
327
精华
0
积分
4787
阅读权限
30
注册时间
2011-3-18
20#分享本帖地址
发表于 2014-4-11 16:09:34 |只看该作者 微信分享
tribbianidan 发表于 2014-4-11 14:22
听有人说要用。net lucene 加 分词来做。是么?

这个得看你的具体需求,你得描述下你需要什么样的输入和输出。
不过这种项目基本都是分词加全文索引。

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  33.73%

UID
179867
热情
1393
人气
2141
主题
33
帖子
1404
精华
0
积分
2506
阅读权限
30
注册时间
2009-4-30
19#分享本帖地址
发表于 2014-4-11 15:53:11 |只看该作者 微信分享
pAtrick 发表于 2014-4-11 14:47
哦这样。但是除非做full text search,否则没法index,不能index的话每次搜索都是full table scan。数据量 ...

在我的实践中,除非你的table真的很大,这种搜索还是很快的。像lz这种算小型的database,返回的速度基本是1秒以内。

但是我也是菜鸟,不知道有没有更加好的方法。

使用道具 举报

Rank: 14Rank: 14Rank: 14Rank: 14

升级  4%

UID
66827
热情
5728
人气
7085
主题
96
帖子
7391
精华
2
积分
10200
阅读权限
30
注册时间
2006-3-15
18#分享本帖地址
发表于 2014-4-11 15:52:13 |只看该作者 微信分享
tribbianidan 发表于 2014-4-11 13:39
我意思表达错了,一个数据库,有几个表示关于问题‘答案的,其他的的表是关于学生和课程。。等详情的。
...

就你这个问题来说吧,如果是每个学生答案都不一样。那说明答案是动态的,既然是动态的东西就不要放数据库。你可以在数据库放课程的名字,时长,价格。 然后根据每个学生的信息开始进行汇总,最后算出这个学生要读多少课程。

如果你打算这个就保存到数据库,那还怎么办法说。

兄弟,数据库是保持数据的! 不是信息!你现在要用数据库保存信息,这就不对了。

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

升级  80.1%

UID
15321
热情
1674
人气
2300
主题
17
帖子
13722
精华
10
积分
9005
阅读权限
30
注册时间
2003-4-23

10周年纪念

17#分享本帖地址
发表于 2014-4-11 15:47:37 |只看该作者 微信分享
csamzhou 发表于 2014-4-11 14:38
不会很慢啊。全部搜索都是用一个query。

那你会怎么做?

哦这样。但是除非做full text search,否则没法index,不能index的话每次搜索都是full table scan。数据量大的话full table scan是很吓人的

语言分析很难,所以我也不知道

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  33.73%

UID
179867
热情
1393
人气
2141
主题
33
帖子
1404
精华
0
积分
2506
阅读权限
30
注册时间
2009-4-30
16#分享本帖地址
发表于 2014-4-11 15:38:44 |只看该作者 微信分享
pAtrick 发表于 2014-4-11 14:26
这得有多么的慢啊

不会很慢啊。全部搜索都是用一个query。
Select * from Questions
where question like "what" Or question like "is" Or...


那你会怎么做?

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

升级  80.1%

UID
15321
热情
1674
人气
2300
主题
17
帖子
13722
精华
10
积分
9005
阅读权限
30
注册时间
2003-4-23

10周年纪念

15#分享本帖地址
发表于 2014-4-11 15:26:22 |只看该作者 微信分享
csamzhou 发表于 2014-4-11 10:36
第一点意思是说,例如用户输入“where can I find student support",你就把这句话的每一个字都去databas ...

这得有多么的慢啊

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  33.73%

UID
179867
热情
1393
人气
2141
主题
33
帖子
1404
精华
0
积分
2506
阅读权限
30
注册时间
2009-4-30
14#分享本帖地址
发表于 2014-4-11 15:24:31 |只看该作者 微信分享
tribbianidan 发表于 2014-4-11 13:48
你的意思是不是。。。从where开始到support,把每一个字在 question table里面的question field里搜索一遍 ...

嗯是这个意思。当你得到这些结果之后,可以处理了同样的再呈现出来啊

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  62.8%

UID
270938
热情
1543
人气
2660
主题
81
帖子
1557
精华
0
积分
2942
阅读权限
30
注册时间
2010-12-29
13#分享本帖地址
发表于 2014-4-11 15:22:28 |只看该作者 微信分享
听有人说要用。net lucene 加 分词来做。是么?

使用道具 举报

Rank: 12Rank: 12Rank: 12

升级  85.8%

UID
279905
热情
3666
人气
5510
主题
27
帖子
327
精华
0
积分
4787
阅读权限
30
注册时间
2011-3-18
12#分享本帖地址
发表于 2014-4-11 15:09:01 |只看该作者 微信分享
不知道你的用户是怎么样输入查询的问题, 也不知到你想怎样呈现你的结果?
假设你的需求是用户能够任意输入问题,你是把所以相关的预先设好的问题答案都显示出来的话。
1. 对于第一类问题,full text 索引最好了,像lucene。 它是先对查询进行分词,然后所有包含你分词结果的doc。具体你可以看看lucene。
2. 第二类问题,不知道你的具体需求。就像有enroll 和web dev 2 个关键字在查询里面,你怎么知道是问能不能还是什么时候呢?

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  62.8%

UID
270938
热情
1543
人气
2660
主题
81
帖子
1557
精华
0
积分
2942
阅读权限
30
注册时间
2010-12-29
11#分享本帖地址
发表于 2014-4-11 14:48:45 |只看该作者 微信分享
csamzhou 发表于 2014-4-11 10:36
第一点意思是说,例如用户输入“where can I find student support",你就把这句话的每一个字都去databas ...

你的意思是不是。。。从where开始到support,把每一个字在 question table里面的question field里搜索一遍。那么我一些其他的问题也用到了这些关键字,也会在搜索结果中展现出来。 而且假如我就有一个一模一样的问题,where can I find student support。 那么在搜索结果里面是不是就会吧含这些关键字的问题重复好几遍了。

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  62.8%

UID
270938
热情
1543
人气
2660
主题
81
帖子
1557
精华
0
积分
2942
阅读权限
30
注册时间
2010-12-29
10#分享本帖地址
发表于 2014-4-11 14:39:30 |只看该作者 微信分享
webgenius 发表于 2014-4-11 13:16
哥们,你把问题想的太简单了,而且可能你还没有搞清楚数据是怎么用的。一开始你就说“现在建了2个数据库,一 ...

我意思表达错了,一个数据库,有几个表示关于问题‘答案的,其他的的表是关于学生和课程。。等详情的。

而且不可能是问题答案一一对应的。比如how many papers do I have to take before Graduation? 这种问题的答案不可能是存储在表里。这个问题的答案因人而异。

wiki ?pedia么 哪里下啊

使用道具 举报

Rank: 14Rank: 14Rank: 14Rank: 14

升级  4%

UID
66827
热情
5728
人气
7085
主题
96
帖子
7391
精华
2
积分
10200
阅读权限
30
注册时间
2006-3-15
9#分享本帖地址
发表于 2014-4-11 14:16:55 |只看该作者 微信分享
本帖最后由 webgenius 于 2014-4-11 13:23 编辑

哥们,你把问题想的太简单了,而且可能你还没有搞清楚数据是怎么用的。一开始你就说“现在建了2个数据库,一个是关于问题,答案,问题的category的” 不太清楚干嘛要2个数据库? 如果你真想自己做成这个功能,我建议你下载一个wiki,看看别人的数据库结构和搜索方式。

如果你只是实现这个功能,那就建一个数据库(database),一个类别表(问题的种类),问题题目表,问题答案表。 写网页代码显示每个问题关联的答案,输出一个静态页面。 然后开通google insite search功能就可以了。

你说的这个功能涉及到语言学,如果你就只有10个问题那手工匹配就可以完成,如果有500个问题。光去分辨用户输入语句的定语,主语,谓语和关键词匹配起码需要半年的时间。 这个你还是考虑英文母语的人输入方式。你要是加上非母语的排列组合,那就数不清了。

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  62.8%

UID
270938
热情
1543
人气
2660
主题
81
帖子
1557
精华
0
积分
2942
阅读权限
30
注册时间
2010-12-29
8#分享本帖地址
发表于 2014-4-11 11:57:22 |只看该作者 微信分享
Philip_J._Fry 发表于 2014-4-11 09:11
天哪!!!!是要动脑子的问题吗????这种帖子,不删不人道啊!

高手还谦虚

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  33.73%

UID
179867
热情
1393
人气
2141
主题
33
帖子
1404
精华
0
积分
2506
阅读权限
30
注册时间
2009-4-30
7#分享本帖地址
发表于 2014-4-11 11:36:21 |只看该作者 微信分享
tribbianidan 发表于 2014-4-11 10:20
你的第二点, 我的prerequisite的table,是这样的(courseid,prerequisiteid(也是reference course id),p ...

第一点意思是说,例如用户输入“where can I find student support",你就把这句话的每一个字都去database搜索,当然了,你可以省略掉“can” "I" 因为你知道他们不会出现在你的database里面。

使用道具 举报

Rank: 16Rank: 16Rank: 16Rank: 16

升级  64.98%

UID
306233
热情
15252
人气
17863
主题
59
帖子
3186
精华
0
积分
18249
阅读权限
30
注册时间
2011-12-13

新时政 10周年纪念

6#分享本帖地址
发表于 2014-4-11 11:27:54 |只看该作者 微信分享
好长。。。没耐心看
瞄了一眼脑中飘过当年的麻省理工AI网上课程。。。AI算法

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  62.8%

UID
270938
热情
1543
人气
2660
主题
81
帖子
1557
精华
0
积分
2942
阅读权限
30
注册时间
2010-12-29
5#分享本帖地址
发表于 2014-4-11 11:20:08 |只看该作者 微信分享
csamzhou 发表于 2014-4-11 09:15
个人见解。
1。关于搜索,每个词都搜索一次,返回和这句话所有词有联系的entries。还可以首先排除一些很常 ...

你的第二点, 我的prerequisite的table,是这样的(courseid,prerequisiteid(也是reference course id),programid(因为)不同的program的课程也有不同的prerequisite )用的compound primary key

第一点没明白,不过是谢谢你了

<img src="C:\Users\Fibonacci\Pictures\enrollment.jpg" />

怎么上传图片啊?不知道这么上行不。

使用道具 举报

Rank: 10Rank: 10Rank: 10

升级  33.73%

UID
179867
热情
1393
人气
2141
主题
33
帖子
1404
精华
0
积分
2506
阅读权限
30
注册时间
2009-4-30
地板
发表于 2014-4-11 10:15:34 |只看该作者 微信分享
个人见解。
1。关于搜索,每个词都搜索一次,返回和这句话所有词有联系的entries。还可以首先排除一些很常用的而且没有相关的词(where,what)
2. 你的prerequisite连接包含那个course pk,例如:http://www.myshool.co.nz/course/coursePK/prerequisite

使用道具 举报

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

升级  4.99%

UID
363411
热情
18301
人气
19618
主题
239
帖子
3712
精华
2
积分
20998
阅读权限
30
注册时间
2013-8-19

新时政 20周年纪念 平安如意勋章

板凳
发表于 2014-4-11 10:11:37 |只看该作者 微信分享
天哪!!!!是要动脑子的问题吗????这种帖子,不删不人道啊!

使用道具 举报

Rank: 12Rank: 12Rank: 12

升级  6.2%

UID
56955
热情
2789
人气
3913
主题
23
帖子
433
精华
0
积分
3593
阅读权限
30
注册时间
2005-11-26

新时政

沙发
发表于 2014-4-11 10:11:29 |只看该作者 微信分享
等待达人回答
人生果然充满不可预测,计
划永远比不上变化

使用道具 举报

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

手机版| 联系论坛客服| 广告服务| 招贤纳士| 新西兰天维网

GMT+13, 2025-1-17 08:56 , Processed in 0.029973 second(s), 14 queries .

Powered by Discuz! X2 Licensed

Copyright 2001- Sky Media Limited, All Rights Reserved.

回顶部