2009-07-23 44 views
1

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

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

请让我知道这是真的吗?

回答

0

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

和单词men是在它们的内容中找到的。希望能帮助到你。

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

+0

对不起,这是不正确的 - 见我的文章和阅读这两个文档链接SQL Server全文不支持寻找%男性%或*人* – 2009-07-23 08:43:06

+0

我猜。问题是没有使用%men%as关键字,它关于一个关键字在一个段落或短语中,纠正我,如果我错了 – Aneef 2009-07-24 06:05:11

1

全文索引(如果有的话,它们不会被默认启用)使用的是像CONTAINS()FREETEXT(),而不是LIKE操作功能访问。

正常指标(例如,“CREATE INDEX ix_tbl_fld mytable上(文本框)”)可以通过LIKE运营商使用,但不能当图案用通配符%开始......这些搜索要求所有的扫描表中的值。

如果你有很多反复相同值的行,使用SQL Server下表压缩2008 可以提高LIKE“%关键字%”搜索,表现甚至没有索引(我没有它,所以我不能测试这个理论......)。

+0

你将如何通过Linq查询访问Contains或Freetext?我一直在使用“StartsWith”(如字符串函数),它变成一个LIKE %%查询时,我怎样才能访问你从C#/ LINQ描述的自由文本索引方法? – Alex 2009-07-23 06:58:41

+0

对不起,我避免LINQ,正是由于这种原因 - 对于抽象我的口味。 – richardtallent 2009-07-23 15:42:28

0

如果您仔细阅读MSDN文档,您会发现只能搜索诸如“曲棍球”之类的固定表达式或基于前缀的表达式(如“曲棍球*”),但不能用于其他任何内容。

参见:

Supported Forms of Query Terms

Performing prefix searches

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

马克

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是断字的,阻塞的,并通过叙词表。如果freetext_string包含在双引号中,则会执行短语匹配;词干和不执行辞典“