日期:2014-05-17  浏览次数:20621 次

sqlserver 全文索引 多个or条件 快速获取匹配次数的问题!
数据库的表Cnstring字段建立了全文索引
我不知道可不可以一个字段可以直接显示匹配次数。比如 CONTAINS(Cnstring,  '"计算机" or "系统" or “是" or "新东西"')有一条记录他的Cnstring字段值是“我的电脑用的是计算机系统” 实际包含了 "计算机",“系统”,“是”,那么这条记录的匹配次数是3,另外一条记录cnstring字段是“我们都在用计算机系统”这个实际匹配的是2.有没有什么方法可以快速的得到这个结果,我测试了分成多个sql执行多次查询然后在程序里计算次数或者union all语句执行速度太慢了。

------解决方案--------------------
引用:
我想通过这个匹配次数来排序结果。


全文索引分词之后,根据查询条件,自动生成的匹配度的吧,排在前面的,自然匹配度高,怎么还需要你自己去指定?
------解决方案--------------------

select Cnstring,
       case when charindex('计算机',Cnstring,1)>0 then 1 else 0 end
      +case when charindex('系统',Cnstring,1)>0 then 1 else 0 end
      +case when charindex('是',Cnstring,1)>0 then 1 else 0 end
      +case when charindex('新东西',Cnstring,1)>0 then 1 else 0 end '匹配次数'
from [表名]
where contains(Cnstring,'"计算机" or "系统" or "是" or "新东西"')

------解决方案--------------------
可能需要考虑把表的存储数据分开,否则or的效率不高,charindex也是扫描