enter image description here

我有一个带有以下文本的表,我要搜索的关键词是“搜索”。所以我写了一个查询

SELECT [ID]
  ,[TextValue]
FROM
   [dbo].[SearchLike]
WHERE
   [TextValue] LIKE '%Search%'

Q.1 如何修改查询,以便返回文本中的“搜索”记录,并且不应该接受“ lsearch”。 IE根据图像前三个记录仅返回。

有帮助吗?

解决方案

使用喜欢

  • 单行等搜索:

    WHERE
     ' ' + [TextValue] + ' ' LIKE '%[.,;:() ]Search[.,;:() ]%'
    
    /* [] contains list of allowable characters, adding spaces around 
       [TextValue] removes need to have multiple OR [TextValue] LIKE */
    
  • 没有填充,您将需要专门处理字符串开始/结尾出现的字符串:

    WHERE
        [TextValue] LIKE '%Search%' --middle
        OR
        [TextValue] LIKE 'Search%'   --start
        OR
        [TextValue] LIKE '%Search'   --end
    

使用FullText索引

edit2,全文纯粹主义者

CREATE FULLTEXT INDEX 关于自动选项的MSDN状态(默认)

尽管更改会自动传播,但这些更改可能不会立即反映在全文索引中。

因此,它可能无法给出正确的结果。但是几秒钟后它将。

另外,对于最多只有10k行,它将表现出足够的性能:它缩放o(n)。我在一个大约25k行的桌子上使用类似,但用户知道,如果他们以这种方式搜索它会表现不佳(它在“高级”页面上)。我通过管理全文索引来取得权衡

全文搜索不是 正确的解决方案,是 选项

笔记: 经验表明,SQL Server中的FullText索引具有严重的性能含义,即:仅在您真正需要的情况下实施,并且您知道自己在做什么! (@Andrew Bickerton)

其他提示

如果您的表具有非平凡的行,则可能需要尝试一个完整的索引。它将更快,并且仅在确切的单词上匹配。

CREATE FULLTEXT CATALOG <catalog_name> AS DEFAULT;

CREATE FULLTEXT INDEX ON [dbo].[SearchLike](TextValue)
    KEY INDEX pk_id; --requires the existing of a PK or UQ index with this name on this table

现在搜索您的文字:

SELECT [ID]
  ,[TextValue]
FROM
   [dbo].[SearchLike]
WHERE
   CONTAINS([TextValue], 'Search')

更多关于:

我不知道SQL Server是否支持 \b 在Regexes中(在单词边界上匹配)。而且你必须 创建一个用户定义的功能,以允许首先匹配正则匹配, ,但是如果这样做,您可以匹配:

\bSearch\b

如果没有,您仍然应该能够匹配:

(^| )Search( |$)
许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top