使用全文搜索在sql server中搜索字符串的中间部分

问题描述:

我无法使用全文搜索索引搜索字符串的中间部分,例如:有一个字符串“我喜欢音乐”,我无法搜索比如它在字符串的中间部分..使用全文搜索在sql server中搜索字符串的中间部分

+0

like operator ... – 2013-04-08 04:59:03

尝试LIKE运算符。在查询

SELECT 
    * 
FROM 
    YourTABLE 
WHERE 
    ColumnName LIKE '%like%' 

使用Like关键字如下:

select * from tablename where col like '%like%' 

这里是像SQL教程:

http://www.w3schools.com/sql/sql_like.asp

这里是MSDN:

http://msdn.microsoft.com/en-us/library/ms179859.aspx

希望它的帮助。

好吧,为了能继续使用全文索引,避免表扫描,试试这个

select * 
    from yourTable 
    where contains (ColumnName,'like') 
    and (ColumnName not like 'like%' or ColumnName like '_%like%') 

但是,查询优化器可能决定全表扫描更有效。

+0

select * from eg_fulltext其中contains(描述,'“like”')和(描述不像'like%'或描述像'_%like%')---它不起作用 – krishnakishore 2013-04-08 05:58:24

+0

嗯。我测试了它,它在我的机器上工作。第二行过滤掉句子开头只有一个'like'的行,而第一行只包含句子中'like'的行。你能描述一下,什么不起作用? – alzaimar 2013-04-08 06:12:23

+0

好的我正在跟另一个例子 – krishnakishore 2013-04-08 06:20:58

检查您的表是否过期的统计信息,尤其是检查统计信息是否与您的全文索引相关。由于使用的是SQL Server 2008中,所以,你可以查询DMV让你的索引统计信息或使用DBCC看到的统计数据详细信息

DBCC SHOW_STATISTICS ("[schema].[table]",indexname); 

检查第一个返回结果,[更新],[行] ,如果统计数据过期或[取样的行数]远远小于[行数],这会导致SQL引擎决定使用表扫描而不是使用索引,[统计数据]会被[采样行数]所限制。

+0

我认为问题是'在字符串/句子中间'这个子句。据我所知,没有办法用简单的全文来查询。 – alzaimar 2013-04-08 06:18:12