全文索引的contains的疑问

baggio785 2007-01-19 10:58:06
如下的sql语句,为什么结果不一致呢?
1 select count(id) from tablename where name like '%爱%'
2 select count(id) from tablename where contains(name,'爱')
3 select count(id) from tablename where contains(name,'"爱"')
4 select count(id) from tablename where contains(name,'"爱*"')
语句1的结果是最准确的,4的结果小与语句1,2和3的结果一致

语句2 select count(id) from tablename where contains(name,'爱'),是搜索在name列中包含"爱"这个词的所有记录

语句3 select count(id) from tablename where contains(name,'"爱"'),是搜索在name列中包含"爱"这个短语的所有记录

问题一:
其实2和3是一致的,因为关键词就是一个字,但是如果换成一个短语,例如"爱恨交加",按照我的理解语句2和3应该也是一样的,难道语句2会对短语进行分词么?

问题二:
语句4 select count(id) from tablename where contains(name,'"爱*"'),是搜索在name列中以"爱"开头的所有记录,书上说通配符不能放在词的开始处,因为索引是从字符的开头开始搜索,但是
select count(id) from tablename where contains(name,'"*爱"')和select count(id) from tablename where contains(name,'爱')的结果是一样的,而且select count(id) from tablename where contains(name,'"*爱*"')和select count(id) from tablename where contains(name,'"爱*"')结果也是一样的

问题三:
like和contains的结果不相符,like是数据库来进行处理,contains是Microsoft的搜索服务来处理,难道是这个原因而导致的而这结果不一致么?

期待各位高手的精彩解答!!
...全文
507 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxhaobai 2007-02-05
  • 打赏
  • 举报
回复
我最近弄全文索引弄的头大了
发现去年2月份有个人问题和我一样
如下
服务器: 消息 7607,级别 17,状态 1,行 1
对全文目录 'test'(属于数据库 ID 10 中的表 ID 279672044)的搜索(搜索条件为 '"*公司*"')失败,结果(8004110a)未知。
至今没有解决
icehouse 2007-01-24
  • 打赏
  • 举报
回复
我站一楼!
周建的文章推荐!比较精炼!比我看帮助感觉更能看进去。
够懒的!赫赫!
baggio785 2007-01-22
  • 打赏
  • 举报
回复
顶起来
baggio785 2007-01-20
  • 打赏
  • 举报
回复
顶起来
caixia615 2007-01-19
  • 打赏
  • 举报
回复
全文索引就是存在着一些问题,分开来查询结果是不正确的
rookie_one 2007-01-19
  • 打赏
  • 举报
回复
很多这种帖子至今还沉没于海底而无法揭帖
rookie_one 2007-01-19
  • 打赏
  • 举报
回复
唉。。。

小弟真正在本区混,大概还不到一个月时间,其间居然看到不下6个帖子,都是问这个


此问题由来已久了,都没有得到一个准确的解释


希望有人能解释清楚这个问题。。。
gc_ding 2007-01-19
  • 打赏
  • 举报
回复
看看邹老大的总结,很全哦
http://topic.csdn.net/t/20040821/10/3295983.html#
baggio785 2007-01-19
  • 打赏
  • 举报
回复
自己顶~

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧