估计这问题无解,是高手就来。关于关键字排序的问题。
破碎的脸 2009-07-09 04:58:15 数据库里大概有300万行数据,用户输入查询之后。会进行分词。
大概会把词分为“关键字”和“非关键字”
这样麻烦就来了。因为关键字必然是少数。打个比方,就拿这个系统是求职者管理系统来说(事实上不是这个,但有点类似)。
拿性别来说,男、女,肯定是关键字。拿称谓来说,先生、小姐、老师,学生之类的一大堆肯定是关键字,这个好处理。
但是非关键字怎么办?求职者的名字必然不可能是关键字。
那么,在查询中(类似于百度那种,可以随意输入的),我怎么样知道这是个学生的名字并让它显示靠前。
当然,这个还是比较容易的,只需要检查该条信息中包含这些字出现的次数和位置就可以判定了,但是!!!!
数据量有300万。。。。这样检查的话,必然会进行排序或是别的方式来处理,甚至要用更多的 与 逻辑。。。
那会造成查询响应时间过长,如果这样的字太多,必然会查询超时。。。。
所以,能不能不用排序和与逻辑的方式,去检查这些数据,看看里面包含了多少个用户输入的字,并让其显示靠前?
最好是当输入人名(很明显,我这个项目里是公司名,不能用长度来判定,就当是少数民族的名字吧,够长!)的时候,
我怎么样才能知道用户输入的是人名?麻烦的是用户还有可能会输入,类似于
重庆市渝中区周杰伦学生放假待业中。。。
这样的查询字符串。。。我怎么样才可以知道,这个人的人名是
周杰伦?
先说明一下,重庆市,渝中区这两个是关键字。。。
还有,用户不一定会输地名。。。所以别指望使用关键字联想的方式来确定这个人名。有可能直接就来个
周杰伦放假待业中
这样的话,全都不是关键字,那我怎么样能得到周杰伦。然后把它带入姓名中查询。。。(如果数据库里没这个人名,使用and逻辑也会超时,如果使用or逻辑的话,查了等于没查。还有别的条件)
这里处理起来非常头痛。。。。请大神们指点。。。对了,这个项目的所有东西都是我自己写的,没有调用第三方类库,千万别把lucene搬出来哦。。。我可不想改。。。。而且这个项目也不适合用lucene来做。。。