【问题标题】:SQL Server Full Text Search Leading WildcardSQL Server 全文搜索前导通配符
【发布时间】:2011-02-09 11:59:42
【问题描述】:

查看this SO question 并进行自己的研究后,您似乎在使用全文搜索时不能使用前导通配符。

因此,在最简单的示例中,如果我有一个包含 1 列的表格,如下所示:

表 1

硬币
造币
底币

select COLUMN1 from TABLE1 where COLUMN1 LIKE '%coin%' 会给我想要的结果。

如何在列上启用全文搜索时获得完全相同的结果?

以下两个查询返回完全相同的数据,这不是我想要的。

SELECT COLUMN1 FROM TABLE1 WHERE CONTAINS(COLUMN1, '"coin*"')

SELECT COLUMN1 FROM TABLE1 WHERE CONTAINS(COLUMN1, '"*coin*"')

【问题讨论】:

  • 您是想要任何包含“coin”四个字母的 COLUMN1 值,还是想要包含“coin”一词的值?
  • 好吧,我认为任何 COLUMN1 值包含四个字母“硬币”所以。 coin、undercoin、coinage、coins rock、silver coin,都应该匹配。

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


【解决方案1】:

全文搜索适用于查找单词或词干。因此,它在“undercoin”中的任何地方都找不到“coin”这个词。您寻求的是使用全文搜索的能力搜索后缀,它本身并不这样做。有一些 hacky 解决方法,例如创建反向索引和搜索“nioc”。

【讨论】:

  • 非常好的解决方案,但与like '%abc%'相比它有多快
  • @alexanderg - 根据数据量,它可能会快很多数量级。这是搜索索引或扫描整个表之间的区别(%abc% 会这样做)。
  • 谢谢。这就是我需要的,我会试试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2010-09-05
相关资源
最近更新 更多