| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1844 人关注过本帖
标题:[讨论]如何实现象google百度那样的模糊查询?
只看楼主 加入收藏
盖茨他爹
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:5255
专家分:0
注 册:2005-5-3
收藏
得分:0 
百度还要复杂的多,自动分词功能估计是很大的工程,特别是汉语分词,特别麻烦,程序能自动分出哪些词的使用频率等进行统计,并且要自动把一句话分成若干部分,以词来划分
2006-06-12 11:55
islet
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:89
帖 子:6548
专家分:0
注 册:2005-1-28
收藏
得分:0 

[原创]
主要代码示意如下(c#版):
key为用户输入的内容
keywords为数据库的词库表
sql为数据查询语句
order为数据排序语句
words为要查的所有字段链接后的结果
conn为数据库操作类实例


//找出所有符合用户输入内容的关键字
dw=conn.Select("select title from keywords where '"+key+"' like '%'+title+'%' and act="+act1);


//循环
for(i=0;i<dw.Rows.Count;i++)
{
word=dw.Rows[i][0].ToString();
sql+=" or "+words+" like '%"+word+"%'";
order+="+(case CHARINDEX('"+word+"',"+words+") when 0 then 1000 else CHARINDEX('"+word+"',"+words+") end)";
}


词库产生代码
ppp为1是查询 分页或刷新后就不是1了
if(ppp=="1")
{
try
{
ds=conn.Select("select id from keywords where title='"+key+"' and act="+act1);
if(ds.Rows.Count<1)
htc=conn.Update("insert into keywords (title,act) values('"+key+"',"+act1+")");//添加关键词,默认搜索1次
else
htc=conn.Update("update keywords set htc=htc+1 where id="+ds.Rows[0][0].ToString());//被搜索率+1
}
catch
{}
}

2006-06-12 11:55
islet
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:89
帖 子:6548
专家分:0
注 册:2005-1-28
收藏
得分:0 
以下是引用盖茨他爹在2006-6-12 11:55:27的发言:
百度还要复杂的多,自动分词功能估计是很大的工程,特别是汉语分词,特别麻烦,程序能自动分出哪些词的使用频率等进行统计,并且要自动把一句话分成若干部分,以词来划分

分词不是很难 难得是不仅是分词 有时候不分才难做呢

2006-06-12 11:57
hangxj
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2045
专家分:0
注 册:2006-4-10
收藏
得分:0 
正在学习中

http://www./
2006-06-12 11:58
盖茨他爹
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:5255
专家分:0
注 册:2005-5-3
收藏
得分:0 
他们的关键词不是人工分的,是程序自动判断出来的
2006-06-12 12:04
islet
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:89
帖 子:6548
专家分:0
注 册:2005-1-28
收藏
得分:0 
我知道 是靠大家搜索同时给它添加的
2006-06-12 12:11
hangxj
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2045
专家分:0
注 册:2006-4-10
收藏
得分:0 
哦,程序自动判断?
想听听

http://www./
2006-06-12 12:27
肖走
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2005-9-26
收藏
得分:0 
以下是引用islet在2006-6-12 10:51:26的发言:
key=replace(replace(replace(replace(replace(replace(replace(request(keywords)," ","")," ","")," ","")," ","")," ","")," ","")," ","") '尽可能把多余的空格替换掉
words=split(key," ") '把输入的关键字按空格断成书组
sql="select * from table where 字段 like '%"&key&"%'" '先给一个条件 什么条件都行
for i= 0 to ubound(words)-1 '把数组循环取出
sql=sql&" or 字段 like '%"&words(i)&"%'"
next
rs.open sql,conn,1,1

我觉得应该是这样的:
key=replace(replace(replace(replace(replace(replace(replace(request(keywords)," ","")," ","")," ","")," ","")," ","")," ","")," ","") '尽可能把多余的空格替换掉
words=split(request(keywords)," ") '把输入的关键字按空格断成书组
sql="select * from table where 字段 like '%"&key&"%'" '先给一个条件 什么条件都行
for i= 0 to ubound(words) '把数组循环取出
sql=sql&" or 字段 like '%"&words(i)&"%'"
next
rs.open sql,conn,1,1

这样就可以了!


2006-06-13 10:21
islet
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:89
帖 子:6548
专家分:0
注 册:2005-1-28
收藏
得分:0 
words=split(request(keywords)," ")
人家输入:手机 飞利浦
就不好了

这样改两个空格换成一个
key=replace(replace(replace(replace(replace(replace(replace(request(keywords)," "," ")," "," ")," "," ")," "," ")," "," ")," "," ")," "," ") '尽可能把多余的空格替换掉
words=split(key," ")
2006-06-13 10:47
hangxj
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2045
专家分:0
注 册:2006-4-10
收藏
得分:0 
问题是你的key已经把空格都换了,还怎么分割呀?

http://www./
2006-06-13 10:58
快速回复:[讨论]如何实现象google百度那样的模糊查询?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025599 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved