SQL:查找Column包含所有给定单词的行

vel*_*koz 5 sql sql-server sql-server-2008

我有一些列EntityName,我希望用户能够通过输入以空格分隔的单词来搜索名称.该空间被隐式地视为"AND"运算符,这意味着返回的行必须具有指定的所有单词,并且不一定按给定顺序排列.

例如,如果我们有这样的行:

  1. abba nina pretty balerina
  2. acdc你整晚都在震撼我
  3. 你是我
  4. 梦幻剧院是你的全部

当用户输入:me you,或you me(结果必须等效)时,结果包含第2行和第3行.

我知道我可以这样:

WHERE Col1 LIKE '%' + word1 + '%'
  AND Col1 LIKE '%' + word2 + '%'
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更优化的解决方案.

CONTAINS将需要一个全文索引,(由于各种原因)不是一个选项.

也许Sql2008有一些针对这些案例的内置半隐藏解决方案?

Red*_*ter 3

我唯一能想到的就是编写一个CLR进行LIKE比较的函数。这应该快很多倍。

更新:现在我想了一下,CLR 没有帮助是有道理的。另外两个想法:

1 - 尝试索引 Col1 并执行以下操作:

WHERE (Col1 LIKE word1 + '%' or Col1 LIKE '%' + word1 + '%')
  AND (Col1 LIKE word2 + '%' or Col1 LIKE '%' + word2 + '%')
Run Code Online (Sandbox Code Playgroud)

根据最常见的搜索(以子字符串开头),这可能会有所改进。

2 - 添加您自己的全文索引表,其中每个单词都是表中的一行。然后就可以正确索引了。