开发者社区> 问答> 正文

MS SQL FTI-搜索“ n *”将返回数字

从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*"')

展开
收起
心有灵_夕 2019-12-26 22:24:47 716 0
1 条回答
写回答
取消 提交回答
  • 有两种方法可以解决此问题,尽管两者都不是那么好。

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

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

    不利的一面是,这会过滤掉“ NN12NOO”,但这可能是您的数据无法代表的极端情况。

    2019-12-26 22:25:02
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载