%searchKeyword上的SQL Server FullText%

时间:2009-07-23 06:32:01

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

我想知道SQL Server是否实际上在可以位于文本中间的搜索中使用其全文索引(例如LIKE%searchKeyword%)?

我忘了我在哪里阅读它,但我确实读过某个地方只有在以“StartsWith”方式(searchKeyword%)使用全文索引时才会使用它,在那里搜索具有固定开头和变量的LIKE结束。

如果这是真的,请告诉我?

4 个答案:

答案 0 :(得分:1)

使用 CONTAINS() FREETEXT()等功能访问全文索引(如果有的话,默认情况下不启用) LIKE 运营商。

正常索引(例如,“CREATE INDEX ix_tbl_fld ON mytable(textfield)”)可由 LIKE 运算符使用,但在模式以%通配符开头时则不能...这些搜索需要扫描表格中的所有值。

如果您有大量重复相同值的行,则使用SQL Server 2008 下的表压缩可以提高 LIKE'%keyword%'搜索的效果,甚至没有索引(我没有它,所以我无法测试这个理论......)。

答案 1 :(得分:0)

是的,它也适用于文本中间的关键字。例如,下面的链接使用全文搜索..

并且在他们的内容中找到了men这个词。希望它有所帮助。

http://www.catalogues4u.com.au/Search.aspx?keyword=men

答案 2 :(得分:0)

如果你仔细阅读MSDN文档,你会发现你只能搜索像“曲棍球”这样的固定表达式,或者像“曲棍球*”那样搜索基于前缀的表达式 - 但遗憾的是,不能搜索任何其他内容。

请参阅:

Supported Forms of Query Terms

Performing prefix searches

不幸的是,这几乎就是全部。你不能搜索“曲棍球”: - (

马克

答案 3 :(得分:0)

在SQL Server中进行自由文本搜索的最佳方法是使用FreeTextTable,这不仅可以为您提供强大的搜索*,还可以返回排名的结果。

例如:

SELECT * 
FROM FreeTextTable(YourTableName,(Column1,Column2), 'search term')
INNER JOIN YourTableName as T ON T.ID = [Key] ORDER BY RANK DESC

这将按照匹配程度(通过RANK列)的顺序为您提供排名结果。

  • “可以输入任何文字,包括单词,短语或句子。如果在全文索引中找到任何术语或任何术语的形式,则会生成匹配.... freetext_string是wordbroken,stemmed如果freetext_string包含在双引号中,则会执行短语匹配;不执行词干和同义词库。“