在列 "关键词" 上建立索引!如果数据的是”中国 汽车“ 这种由空格组成的关键字
declare @v varchar(20)
set @v='中国 汽车 头部'
select top 1 * from tb order by case when charindex(' '+关键词+' ',' '+@v+' ')<>0
then charindex(' '+关键词+' ',' '+@v+' ') else 999 end
declare @v varchar(20)
set @v='中国 汽车 头部'
select top 1 * from tb order by case when charindex(' '+关键词+' ',' '+@v+' ')<>0
then charindex(' '+关键词+' ',' '+@v+' ') else 999 end
drop function [dbo].[f_splitSTR]
GO/*--字符串分函数 分拆指定分隔符的的字符串,返回结果表--邹建 2004.04(引用请保留此信息)--*//*--调用示例 SELECT * FROM f_splitSTR('aa ba b','a ')
--*/
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --要分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re VALUES(@s)
RETURN
END
GO
SET @s = N'中国 汽车' -- 要搜索的关键词-- 搜索
SELECT 文章id
FROM talbe_1 A, dbo.f_f_splitSTR(@s, N' ') B
WHERE A.关键词 = B.col
GROUP BY 文章id
HAVING COUNT(*) = LEN(@s) - LEN(REPLACE(@s, N' ', '')) + 1
SELECT 文章ID
FROM Table
WHERE 关键字='客户输入关键字1'
and 关键字='客户输入关键字2'
FROM Table
WHERE 关键字='客户输入关键字1'
or 关键字='客户输入关键字2'
吧邹老大写的通用
FROM Table
WHERE 关键字='客户输入关键字1'
or 关键字='客户输入关键字2'
GROUP BY 文章ID HAVING COUNT(文章ID)>1
1、建立全站常用关键词库
2、建一索引表,定时统计各关键词在信息中出现频率,频率列表写入一个字段,文章ID列表写入该表一个字段。
3、查询时只从索引表中找关键词,获得信息ID、关键词频率数组。处理数组,优先输出包含所有关键词的ID,然后根据信息ID出现次数多少排序。
我们可以把它理解为文章主题表、商品表、图书表或其它什么表都行
下面我以商品表为例子
表名:T_Goods
字段:
1. goodsID int --商品ID
2. goodsName nvarchar --商品名
3. gColor --商品颜色
4. gPrice --商品单价
5. gMadeCity --商品产地
6. gStyle --商品风格样式
7. ......
......
......标签表:
表名:T_Tags
1. TagID bigint --标签的ID
2. TagTitle nvarchar --tag内容
3. ClickNum int --被点击和访问的次数商品标签对照表:
表名:T_Tags_up
1. ID bigint --ID
2. goodsID nvarchar --商品ID
3. TagID bigint --标签的ID用户标签访问表:
表名:T_Tags_User
1. ID bigint --ID
2. UserID bigint --用户ID
3. TagID bigint --标签的ID
4. ClickNum int --被点击和访问的次数
5. isOwn char(1) --是否为当前用户所建立(以上tag相关的设计,参考了drupal的数据库中相关部分的设计。)在维护(新增、修改)T_Goods表的时候,
根据维护商品的相关属性(商品名、颜色、产地、风格样式、......)生成tag列表,
比照T_Tags中的记录,如果T_Tags中没有某tag,则insert到T_Tags中,
同时在T_Tags_up记录该商品和tag的关联
(对于商品的删除操作,暂不予讨论)
(对于T_Tags_User表的使用情况,暂不予讨论)搜索实现的大体思路:
那么,在进行商品关键字搜索的时候,
系统根据待搜索的关键字(如:[米色 时尚 巴黎 裙子])到T_Tags中查找TagID;
再到T_Tags_up中查找相关的记录,
进而找到T_Goods中的相关记录,是为搜索结果。至于SQL或数据库程序的具体实现,希望看看大家的思路
上楼的帖子发成了那样,不好意思
大家可以copy然后贴到EditPlus 或 UltraEdit ,会比较清晰。
顶
你说的方法中,查找时,"米色 时尚 巴黎 裙子"只要符合一个即可搜索到商品.
但如果我想实现"与"的关系,即要同时满足"米色" "时尚" "巴黎" "裙子",你的设计就无法实现了.
还望高手指点.