搜索“我们的”在SQL Server中使用包含全文搜索

时间:2013-10-07 07:18:20

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

我们使用全文搜索和Contains在SQL Server 2008 R2中的记录之间进行搜索,以下是示例:

NEWS(Title): "We", "New", "Our", "Long-Term", "Seem", "Non.Active"

正如您在News表中看到的那样,标题字段具有值。 我们可以搜索除"Long-Term" And "Non.Active"以外的所有值,实际上我们无法搜索包含短划线(“ - ”)或点(“。”)的单词。我们还会检查这些提示:

SELECT * FROM NEWS WHERE  Contains(Title, 'Non.Active');
SELECT * FROM NEWS WHERE  Contains(Title, 'Non Active');
SELECT * FROM NEWS WHERE  Contains(Title, 'NonActive');
SELECT * FROM NEWS WHERE  Contains(Title, 'Non*');
SELECT * FROM NEWS WHERE  Contains(Title, 'Active');
SELECT * FROM NEWS WHERE  Contains(Title, 'Non');
SELECT * FROM NEWS WHERE  Contains(Title, '*Active');
SELECT * FROM NEWS WHERE  Contains(Title, ' "Non.Active" ');
SELECT * FROM NEWS WHERE  Contains(Title, ' "Non Active" ');
SELECT * FROM NEWS WHERE  Contains(Title, ' "NonActive" ');
SELECT * FROM NEWS WHERE  Contains(Title, ' "Non*" ');
SELECT * FROM NEWS WHERE  Contains(Title, ' "*Active" ');
SELECT * FROM NEWS WHERE  Contains(Title, ' "Active" ');
SELECT * FROM NEWS WHERE  Contains(Title, ' "Non" ');

但他们都没有返回任何结果。 我们也重建了全文索引,但我们没有得到任何结果。

所以问题是:有没有办法搜索包含“。”的单词。或带有全文Contains谓词的“ - ”?任何建议

更新

我很抱歉主要问题是另一个?

你对“非”和“行动”两个词的说法没问题。但我测试的主要案例是“We.Our”和钢铁没有返回任何结果?这是如此有线,我用上面的搜索测试“Non.Action”并且工作但是“We.Our”没有。所以我尝试了另一条记录,我插入了“我们的”,搜索结果还是空的。问题是“我们的”这个词? “我们的”的问题是什么?我也在SQL Server 2012中检查它,但也没有用。有没有人对此有任何想法?

3 个答案:

答案 0 :(得分:0)

在我的情况下,它只是作为

SELECT * FROM NEWS WHERE  Contains(Title,'"Non.*"');

但我听说2008版本中没有什么bug。可能在更新sql server实例后问题会解决。

答案 1 :(得分:0)

您可以在全文目录中查看所需数据的存储方式:

SELECT *
FROM sys.dm_fts_index_keywords_by_document(db_id('DBname'), object_id('TableName'))
WHERE document_id = <Unique Id>

“我们的”这个词怎么样,似乎是一个停顿词。

答案 2 :(得分:0)

关键是Block字和Noisy字应该被检查,在我的情况下our是一个嘈杂的字,我不知道为什么。但问题解决了