%book%的全文目录/索引搜索

时间:2008-11-17 10:28:07

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

我试图围绕如何搜索出现在单词/表达式中间的内容 - 比如搜索“LIKE%book%” - 但是在SQL Server(2005)全文目录中。

我该怎么做?几乎看起来好像CONTAINSFREETEXT都不支持搜索表达式的开头的通配符 - 这真的可以吗?

我原本以为FREETEXT(*, "book")会在里面找到任何带有“书”的东西,包括“重新预订”或类似的东西。

6 个答案:

答案 0 :(得分:15)

不幸的是CONTAINS只支持前缀通配符:

CONTAINS(*, '"book*"')

答案 1 :(得分:7)

SQL Server全文搜索基于将文本标记为单词。没有较小的单位作为单词,所以你可以寻找的最小的东西是单词。

您可以使用prefix searches查找以某些字符开头的匹配项,这是可能的,因为单词列表按字母顺序保存,而服务器所要做的就是扫描列表以查找匹配项。

要做你想要的事情,使用LIKE '%book%'子句的查询可能会同样快(或慢)。

答案 2 :(得分:3)

如果您想进行一些严肃的全文搜索,那么我会(并且已经)使用Lucene.Net。对于除基础知识以外的任何其他内容,MS SQL全文搜索似乎永远不会有效。

答案 3 :(得分:1)

这是一个建议,是该通配符限制的解决方法。您创建一个计算列,其中包含相同的内容,但与您要搜索的列相反。

例如,如果要搜索名为“ProductTitle”的列,则创建名为ProductsRev的列。然后将该字段的“计算列规范”值更新为:

(反向([ProductTitle]))

在搜索中包含“ProductsRev”列,您现在应该能够在单词的开头返回支持通配符的结果。祝你好运!!

答案 4 :(得分:1)

全文有一个表格,列出了引擎找到的所有单词。它应该比全文索引表的行数少一个数量级。你可以从那个表中“选择'%book%'之类的字段”来获取所有包含'book'的单词。然后使用该列表编写全文查询。它很麻烦,但它会起作用,在速度部门也可以。但是,当你这样做时,最终你使用的是全文错误。实际上可能更好地教育这些功能请求的来源,了解全文正在做什么。您希望他们了解WANTS要做什么,这样他们就可以从全文中获得高价值。例如,只在单词的末尾使用通配符,这意味着要考虑有序列表中的单词。

答案 5 :(得分:0)

为什么不在C#中编写程序集来计算所有非重复的后缀。例如,如果你有文字“吃红肉”你可以存放在一个字段“吃掉他的红肉”(请注意,这不是必须添加吃掉的东西)然后在这个领域使用全文搜索。这样做的功能可以用Csharp

轻松编写

x)我知道这似乎是...它是一个工作场所 x)我知道我在插入/更新中增加了开销......除了搜索功能的改进之外,这种开销是微不足道的,这是合理的 x)我知道存储数据的大小也有开销。

但我非常认真,这将是非常快的