代码之家  ›  专栏  ›  技术社区  ›  Itay.B

对数值的SQL全文搜索行为

  •  0
  • Itay.B  · 技术社区  · 8 年前

    我有一张有2亿张唱片的桌子。其中一列定义为varchar(100),它包含在全文索引中。大多数值都是数字。只有少数不是数字。 问题是它不能正常工作。例如,如果一行包含值“123456789”,而我查找的是“567”,则不会返回此行。它只返回值正好为“567”的行。 我做错什么了?

    SQL Server 2012。

    谢谢。

    4 回复  |  直到 8 年前
        1
  •  1
  •   gbn    8 年前

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

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

    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或some fancy trigram approach

        2
  •  0
  •   Mr.Panchamia    8 年前

    您可以这样做:

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

    这将返回在开始、结束或介于某个位置之间具有数字567的所有行。

        3
  •  0
  •   Ronen Ariely    8 年前

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

    如果你想得到一个满足你需求的解决方案,那么你可以发布DDL+DML+“想要的结果”

        4
  •  0
  •   DDS    8 年前

    99%你失踪了 % 在字符串之后和之前搜索 LIKE 条款。
    锿:

    SELECT * FROM t WHERE att LIKE '66'
    

    与使用相同 WHERE att = '66'

    如果你写:

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

    将一个接一个地返回包含两个“sixes”的所有行