SQL全文搜索数值上的行为

时间:2018-06-27 13:41:57

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

我有一张约有2亿条记录的表。其中一列定义为varchar(100),并包含在全文索引中。大多数值是数字。只有少数不是数字。 问题是它运行不正常。例如,如果某行包含值“ 123456789”,而我寻找“ 567”,则该行不返回该行。它只会返回值恰好为“ 567”的行。 我在做什么错了?

sql server 2012。

谢谢。

4 个答案:

答案 0 :(得分:1)

全文搜索不支持前导通配符

在我的设置中,这些返回的相同

SELECT *
  FROM [dbo].[somelogtable]
  where CONTAINS (logmessage, N'28400')

SELECT *
  FROM [dbo].[somelogtable]
  where CONTAINS (logmessage, N'"2840*"')

这给出了零行

SELECT *
  FROM [dbo].[somelogtable]
  where CONTAINS (logmessage, N'"*840*"')

您必须使用LIKE或某些fancy trigram approach

答案 1 :(得分:0)

99%在%子句中搜索字符串前后,您缺少LIKE
es:

SELECT * FROM t WHERE att LIKE '66'

与使用WHERE att = '66'

相同

如果您写:

SELECT * FROM t WHERE att LIKE '%66%'

将返回所有包含2个“六个”的行

答案 2 :(得分:0)

您可以这样做:

....your_query.... LIKE '567%' ;

这将返回在开头,结尾或中间某处具有数字567的所有行。

答案 3 :(得分:0)

问题可能是您使用了错误的工具,因为全文查询执行linguistic搜索,并且您似乎想使用简单的“赞”条件。

如果您想获得满足您需求的解决方案,则可以发布DDL + DML +“所需结果”