1

这似乎是 SQL 全文索引中的奇怪行为。

FTI 以“NN”前缀将数字存储在其索引中,因此“123”保存为“NN123”。

现在,当用户搜索以 N 开头的单词(即包含 "n*" )时,他们也会得到所有数字。

所以:

select [TextField]
from [MyTable] 
where contains([TextField], '"n*"') 

回报:

MyTable.TextField
--------------------------------------------------
此文本包含单词 navigator
这个文不错
此文本只有 123,不应返回

有没有排除最后一行的好方法?是否有一致的解决方法?


需要这些额外的 "" 才能使通配符令牌起作用:

select [TextField] from [MyTable] where contains([TextField], 'n*')

将搜索文字 n* - 并且没有。

--return rows with the word text
select [TextField] from [MyTable] where contains([TextField], 'text')

--return rows with the word tex*
select [TextField] from [MyTable] where contains([TextField], 'tex*')

--return rows with words that begin tex...
select [TextField] from [MyTable] where contains([TextField], '"tex*"')
4

1 回答 1

1

有几种方法可以解决这个问题,但都不是真的那么好。

首先,在您的表格中添加一个列,说明这TextField确实是一个数字。如果您可以这样做并进行过滤,那么您将拥有性能最高的版本。

如果这不是一个选项,那么您将需要添加一个进一步的过滤器。虽然我没有对其进行广泛测试,但您可以添加过滤器AND TextField NOT LIKE 'NN%[0-9]%'

缺点是这会过滤掉“NN12NOO”,但这可能是您的数据未表示的边缘情况。

于 2008-09-12T02:27:56.017 回答