从SQL的全文索引来看,这似乎是奇怪的行为。
FTI在其索引中以“ NN”为前缀存储数字,因此将“ 123”另存为“ NN123”。
现在,当用户搜索以N开头的单词(即包含“ n *”)时,他们还将获得所有数字。
所以:
select [TextField]
from [MyTable]
where contains([TextField], '"n*"')
返回值:
MyTable.TextField
--------------------------------------------------
该文本包含导航器一词 这个文字很好 此文本只有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*"')
有两种方法可以解决此问题,尽管两者都不是那么好。
首先,在表格中添加一栏,说这TextField确实是一个数字。如果您可以这样做并进行过滤,那么您将获得性能最高的版本。
如果这不是一个选择,那么您将需要添加其他过滤器。虽然我还没有对其进行广泛的测试,但是您可以添加过滤器AND TextField NOT LIKE 'NN%[0-9]%'
不利的一面是,这会过滤掉“ NN12NOO”,但这可能是您的数据无法代表的极端情况。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。