估计这问题无解,是高手就来。关于关键字排序的问题。

破碎的脸 2009-07-09 04:58:15
数据库里大概有300万行数据,用户输入查询之后。会进行分词。
大概会把词分为“关键字”和“非关键字”
这样麻烦就来了。因为关键字必然是少数。打个比方,就拿这个系统是求职者管理系统来说(事实上不是这个,但有点类似)。
拿性别来说,男、女,肯定是关键字。拿称谓来说,先生、小姐、老师,学生之类的一大堆肯定是关键字,这个好处理。
但是非关键字怎么办?求职者的名字必然不可能是关键字。
那么,在查询中(类似于百度那种,可以随意输入的),我怎么样知道这是个学生的名字并让它显示靠前。
当然,这个还是比较容易的,只需要检查该条信息中包含这些字出现的次数和位置就可以判定了,但是!!!!
数据量有300万。。。。这样检查的话,必然会进行排序或是别的方式来处理,甚至要用更多的 与 逻辑。。。
那会造成查询响应时间过长,如果这样的字太多,必然会查询超时。。。。
所以,能不能不用排序和与逻辑的方式,去检查这些数据,看看里面包含了多少个用户输入的字,并让其显示靠前?
最好是当输入人名(很明显,我这个项目里是公司名,不能用长度来判定,就当是少数民族的名字吧,够长!)的时候,
我怎么样才能知道用户输入的是人名?麻烦的是用户还有可能会输入,类似于

重庆市渝中区周杰伦学生放假待业中。。。
这样的查询字符串。。。我怎么样才可以知道,这个人的人名是
周杰伦
先说明一下,重庆市,渝中区这两个是关键字。。。

还有,用户不一定会输地名。。。所以别指望使用关键字联想的方式来确定这个人名。有可能直接就来个

周杰伦放假待业中

这样的话,全都不是关键字,那我怎么样能得到周杰伦。然后把它带入姓名中查询。。。(如果数据库里没这个人名,使用and逻辑也会超时,如果使用or逻辑的话,查了等于没查。还有别的条件)

这里处理起来非常头痛。。。。请大神们指点。。。对了,这个项目的所有东西都是我自己写的,没有调用第三方类库,千万别把lucene搬出来哦。。。我可不想改。。。。而且这个项目也不适合用lucene来做。。。
...全文
74 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
occam 2009-07-09
  • 打赏
  • 举报
回复
先用js分析一下结果并提示用户,允许手动修改,正确的话把人名保存到别的字段.. -.-

已经在库里的导出来慢慢分析吧...
破碎的脸 2009-07-09
  • 打赏
  • 举报
回复
最头痛的是我这是为数据订制系统,而不是先有系统再订制数据,当然。这个问题不大,数据是可以进行过滤和加工的,但为了减轻管理人员的维护工作量,我还是决定保留原有数据(这个数据非常乱。。。。)
破碎的脸 2009-07-09
  • 打赏
  • 举报
回复
对了,服务器就一台。所以也别指望有集群来处理了。。。
破碎的脸 2009-07-09
  • 打赏
  • 举报
回复
行了,解决办法想到了。必然不可能创建人名表和人名索引。
弱弱的问一句LINQ高手,Union联接A和B表,怎么样让B表的数据优先显示?
yulitian 2009-07-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 himetale 的回复:]
中国人名这种东西本来就是随便起的
除非是名人,可以进词库的那种

百度能搜到是因为那些对搜索引擎友好的网页都主动提供了人名做关键字。
至少我没见过百度能把一篇文章里的路人甲的名字搜到。
[/Quote]

路人甲~~~~

我的QQ就叫这个名的
VistaKobe 2009-07-09
  • 打赏
  • 举报
回复
学习。
HimeTale 2009-07-09
  • 打赏
  • 举报
回复
中国人名这种东西本来就是随便起的
除非是名人,可以进词库的那种

百度能搜到是因为那些对搜索引擎友好的网页都主动提供了人名做关键字。
至少我没见过百度能把一篇文章里的路人甲的名字搜到。
yulitian 2009-07-09
  • 打赏
  • 举报
回复
寒,分词和检索技术~~~~~~~
俺数学还不够好,撤退先
破碎的脸 2009-07-09
  • 打赏
  • 举报
回复
还有高手出来解决一下没?

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧