【问题标题】:Full text search is not working if search for characters anywhere in the string如果在字符串中的任何位置搜索字符,则全文搜索不起作用
【发布时间】:2014-04-28 13:58:30
【问题描述】:

我已经在 ClientReference 列上创建了一个全文搜索索引,但是如果我想搜索出现在字符串中任何位置的字符,它就不起作用了。

字符串 = 'abcdef'

这行不通;

SELECT * FROM Proposals 
WHERE CONTAINS([ClientReference], '"*bc*"')

但如果我使用前缀,它会起作用。

SELECT * FROM Proposals 
WHERE CONTAINS([ClientReference], '"a*"')

添加

刚才有人提到“不可能,只能按单词搜索,不能按单词中的字母搜索。”

那么为什么下面的代码有效并在字符串中的任何位置查找“223”?

 select ClientReference1 from ClientReferences 
 where CONTAINS([ClientReference1], '"*223*"') 

【问题讨论】:

  • 您使用的是此处提到的 prefix_term,它将获取以这些字母或单词 technet.microsoft.com/en-us/library/ms187787.aspx 开头的数据,这就是 c* 有效但不能 re* 的原因
  • 如何通过全文搜索完成这个ClientReference LIKE '%re%'?
  • 这是不可能的,只能按单词搜索,不能按单词中的字母搜索。
  • 你能显示完整的查询吗?
  • 我已经更新了我的问题。

标签: sql-server-2008 full-text-search


【解决方案1】:

如果您没有大量文本和/或大量行(数百万以上),则使用 LIKE 而不是 CONTAINS 可能会更好。

SELECT * FROM Proposals  WHERE ClientReference LIKE '%re%'

【讨论】:

  • 全文搜索有原因吗?该字段中的文本量很小......也许只使用likeSELECT * FROM Proposals WHERE ClientReference LIKE '%re%'
  • 我不介意使用like,因为我们在这个新表中不会有数百万行,但我仍然想知道为什么全文搜索不起作用。
  • 你当然不应该把*放在're'之后。不知道为什么改变它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
相关资源
最近更新 更多