在列 "关键词" 上建立索引!如果数据的是”中国 汽车“ 这种由空格组成的关键字
declare @v varchar(20)
set @v='中国 汽车 头部'
select top 1 * from tb  order by case when charindex(' '+关键词+' ',' '+@v+' ')<>0
 then charindex(' '+关键词+' ',' '+@v+' ') else 999 end

解决方案 »

  1.   

    -- 1. 建立一个函数, 用于分拆搜索关键词if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
    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
      

  2.   

    -- 2. 调用函数实现高效检索(关键词上建立索引)DECLARE @s nvarchar(4000)
    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
      

  3.   

    其实应该有更简单的方法:可以先将用户输入的关键字根据空格分隔(我相信在Web这一层实现这个应该是蛮方便的)为数组,之后循环处理,组合生成以下的SQL语句:
    SELECT 文章ID
      FROM Table
      WHERE 关键字='客户输入关键字1'
        and 关键字='客户输入关键字2'
      

  4.   

    应该是SELECT 文章ID
      FROM Table
      WHERE 关键字='客户输入关键字1'
        or 关键字='客户输入关键字2' 
     吧邹老大写的通用
      

  5.   

    SELECT 文章ID
      FROM Table
      WHERE 关键字='客户输入关键字1'
        or 关键字='客户输入关键字2' 
    GROUP BY 文章ID HAVING COUNT(文章ID)>1
      

  6.   

    我想知道你这个关键词列表是怎么来的。从这个表里查到文章ID3那倒是小问题。用全文检索效果不是很好,想增加一个关键词完全匹配的查询
    1、建立全站常用关键词库
    2、建一索引表,定时统计各关键词在信息中出现频率,频率列表写入一个字段,文章ID列表写入该表一个字段。
    3、查询时只从索引表中找关键词,获得信息ID、关键词频率数组。处理数组,优先输出包含所有关键词的ID,然后根据信息ID出现次数多少排序。
      

  7.   

    既然不少人感兴趣 大家不妨讨论下 呵呵我把我的这部分设计考虑拿出来,大家批评批评先说说主题表和标签库表:主题表:
    我们可以把它理解为文章主题表、商品表、图书表或其它什么表都行
    下面我以商品表为例子
    表名: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或数据库程序的具体实现,希望看看大家的思路
      

  8.   

    CSDN的论坛发布排版真是不好
    上楼的帖子发成了那样,不好意思
    大家可以copy然后贴到EditPlus 或 UltraEdit ,会比较清晰。
      

  9.   

    也很想知道TAGS的设计以及实现方法
      

  10.   

    yzyun:
    你说的方法中,查找时,"米色 时尚 巴黎 裙子"只要符合一个即可搜索到商品.
    但如果我想实现"与"的关系,即要同时满足"米色" "时尚" "巴黎" "裙子",你的设计就无法实现了.
    还望高手指点.