当前位置:编程学习 > VB >>

麻烦给个类似 搜索引擎 的思路

就是一个数据库,保存以下了的东西:

ID 厂商名称   商品名称   型号资料   备注信息  价格
1   INTEL         CPU     I3 2120    散装     100
2   INTEL         CPU     I7 3770    散装     200
3   INTEL         CPU     I7 3770    盒装     300

要求如下:
有个TEXTBOX
然后 用户输个 INTEL I7,   就SELECT 出 第2,第3条记录
或者 输入个 散装 I7 CPU   就把第2条记录 选出来



--------------------编程问答-------------------- 然后 用户输个 INTEL I7,   就SELECT 出 第2,第3条记录

Select * FROM Label Where 厂商名称 Link '*INTEL*' and 型号资料 Link '*I7*'

或者 输入个 散装 I7 CPU   就把第2条记录 选出来

Select * FROM Label Where 型号资料 Link '*I7*' And 备注信息 Link '*散装*' And 商品名称 Link '*CPU*' --------------------编程问答-------------------- 关键是 用户输入的文体的先后次序 是不定的啊.他可能输个 散装 INTEL I7 ,也可能输入个 I7 INTEL 散装
SQL语句倒是好写
TEXTBOX 不会智能生成  厂商名称 Like '*INTEL*' and 型号资料 Like '*I7*' 啊
我能想到的办法是 
 select * from 数据库 where (型号资料 LIKE '%INTEL%' or  商品资料 LIKE '%INTEL%' or  型号资料  LIKE '%INTEL%' or   备注信息 LIKE '%INTEL%') and (型号资料 LIKE '%I7%' or  商品资料 LIKE '%I7%' or  型号资料  LIKE '%I7%' or   备注信息 LIKE '%I7%') AND ....

这样用是可以用,但我这SQL语句 又长又臭啊.然后数据量一多的话肯定很慢.请问有更好的解决方法吗
--------------------编程问答-------------------- 对于中文搜索来说,需要分词和建立倒排索引。 --------------------编程问答-------------------- 自己google下,有很多相关的产品可以实现。 --------------------编程问答-------------------- 这样的应用,还是每个字段安排一个查找目标输入框,比较实在 --------------------编程问答-------------------- 给你个思路,把字段内容用查询语句连起来,然后在查询条件里用模糊查询,至于要达到搜索引擎的效率,那就要看你的数据量来说了,太多的话考虑用多台数据中心服务器,用云架构综合处理。
模糊查询可参考这里 http://bbs.csdn.net/topics/30436639 --------------------编程问答-------------------- 可以这样:

1 程序启动时先做一个数据库预处理,将每个关键字段的唯一值各存在一张临时表中。

2 用户输出字符串时,先切分,到临时表中预查。如果没有,此时便有结论了。

3 根据预查的结果(因为已知关键字对应的字段),构造 SQL 再来查询。

--------------------编程问答--------------------
引用 7 楼 of123 的回复:
可以这样:

1 程序启动时先做一个数据库预处理,将每个关键字段的唯一值各存在一张临时表中。

2 用户输出字符串时,先切分,到临时表中预查。如果没有,此时便有结论了。

3 根据预查的结果(因为已知关键字对应的字段),构造 SQL 再来查询。

(1)就是建立倒排索引的山寨做法。
(2)就是中文分词。 --------------------编程问答--------------------
引用 2 楼 wzqx 的回复:
关键是 用户输入的文体的先后次序 是不定的啊.他可能输个 散装 INTEL I7 ,也可能输入个 I7 INTEL 散装
SQL语句倒是好写
TEXTBOX 不会智能生成  厂商名称 Like '*INTEL*' and 型号资料 Like '*I7*' 啊
我能想到的办法是 
 select * from 数据库 where (型号资料 LIKE '%INTEL%' or  商品资料 LIKE '%INTEL%' or  型号资料  LIKE '%INTEL%' or   备注信息 LIKE '%INTEL%') and (型号资料 LIKE '%I7%' or  商品资料 LIKE '%I7%' or  型号资料  LIKE '%I7%' or   备注信息 LIKE '%I7%') AND ....

这样用是可以用,但我这SQL语句 又长又臭啊.然后数据量一多的话肯定很慢.请问有更好的解决方法吗


对的, 按照你的要求来看,最后就是这样又臭又长的SQL没错. 但是毕竟SQL就是这样用的. 更臭更长的还多着呢. 所以, 别太计较啦 --------------------编程问答-------------------- 我今天也遇到这个问题了,和你的问题差不多
http://bbs.csdn.net/topics/390519867

望大神们也给我指点指点  --------------------编程问答--------------------
引用 9 楼 WallesCai 的回复:
Quote: 引用 2 楼 wzqx 的回复:

关键是 用户输入的文体的先后次序 是不定的啊.他可能输个 散装 INTEL I7 ,也可能输入个 I7 INTEL 散装
SQL语句倒是好写
TEXTBOX 不会智能生成  厂商名称 Like '*INTEL*' and 型号资料 Like '*I7*' 啊
我能想到的办法是 
 select * from 数据库 where (型号资料 LIKE '%INTEL%' or  商品资料 LIKE '%INTEL%' or  型号资料  LIKE '%INTEL%' or   备注信息 LIKE '%INTEL%') and (型号资料 LIKE '%I7%' or  商品资料 LIKE '%I7%' or  型号资料  LIKE '%I7%' or   备注信息 LIKE '%I7%') AND ....

这样用是可以用,但我这SQL语句 又长又臭啊.然后数据量一多的话肯定很慢.请问有更好的解决方法吗


对的, 按照你的要求来看,最后就是这样又臭又长的SQL没错. 但是毕竟SQL就是这样用的. 更臭更长的还多着呢. 所以, 别太计较啦


要按这样的方法,我这有50多分表,每个表里有至少15个字段,那的把每个字段都的like一遍吗?
那不要命了! --------------------编程问答--------------------
引用 8 楼 caozhy 的回复:
Quote: 引用 7 楼 of123 的回复:

可以这样:

1 程序启动时先做一个数据库预处理,将每个关键字段的唯一值各存在一张临时表中。

2 用户输出字符串时,先切分,到临时表中预查。如果没有,此时便有结论了。

3 根据预查的结果(因为已知关键字对应的字段),构造 SQL 再来查询。

(1)就是建立倒排索引的山寨做法。
(2)就是中文分词。


关于这两点很感兴趣,能否给予详细点的介绍
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,