【问题标题】:SQL Server Full Text Search - Is it possible to search in the middle of a word?SQL Server 全文搜索 - 是否可以在单词中间进行搜索?
【发布时间】:2011-07-05 16:03:39
【问题描述】:

我对我的数据库进行了全文搜索。

是否可以在单词中间搜索某些文本?

例如,我有一列描述,其中包含以下文本:

Revolution

是否可以搜索“EVO”并让它在“革命”这个词中找到它,或者我是否坚持做一个 LIKE:

SELECT * FROM Table WHERE Description LIKE '%EVO%'

是否有与上述查询等效的 FTS?

编辑
我想弄清楚我想问什么,因为看起来有些人可能会感到困惑。我相信 SQL Server FTS 只能在单词的开头进行搜索(前缀搜索)。所以如果我这样查询:

SELECT * FROM Table WHERE CONTAINS(Description, '"Revo*"')

然后它会找到Revolution这个词。我想知道是否有可能在单词的中间进行搜索。不是在最后。不是一开始。从看起来这是不可能的,这是有道理的,因为 SQL 服务器将如何索引它,但我只是想确定。

【问题讨论】:

标签: sql-server full-text-search


【解决方案1】:

这看起来以前出现过,简短的回答是“不”。 Previous thread

【讨论】:

    【解决方案2】:

    您可以使用CONTAINS。看这个链接

    Full text catalog/index search for %book%

    【讨论】:

    • 其中提到的 REVERSE 列的东西不起作用。 EVO 就在这个词的正中间。听起来这在全文搜索中是不可能的,因为它只能进行前缀搜索。
    • @Dismissile,是的,这是真的; CONTAINS 会做一些通配符搜索;可能不适合全文搜索。在链接到此处之前,我确实浏览了该帖子,并且有点下降,可能无法满足您的要求,但仍然想在此处发布,看看是否有帮助。
    【解决方案3】:

    进行此搜索的唯一方法是添加单词的“旋转”分解。 例如,“运动”一词将分解为 9 个新的“词”,例如: “运动” “骚动” “情感” “运动” “议案” “化” “离子” “上” “n” 所以现在你可以把这个表放到全文搜索中(或者用单词的所有这些部分创建一个新的列)来快速找到它。

    我写了一篇没有 FTS 的论文(但它是法文的): https://blog.developpez.com/sqlpro/p13123/langage-sql-norme/like-mot-ou-les-index-rotatifs

    【讨论】:

      【解决方案4】:

      您可以使用CONTAINS 代替LIKE。

      SELECT * 
        FROM Table 
       WHERE CONTAINS(Description, '"EVO*"')
      

      【讨论】:

      • @Dismissile:我刚刚重读了文档,只能加前缀。因此,“evo*”将带回“进化”而不是“革命”。我认为您不能在此查询中使用 FTS。
      • @Neil Knight - 我就是这么想的。
      猜你喜欢
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2010-09-14
      • 2020-05-31
      • 2011-06-11
      • 1970-01-01
      相关资源
      最近更新 更多