我们使用全文搜索和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中检查它,但也没有用。有没有人对此有任何想法?
答案 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
是一个嘈杂的字,我不知道为什么。但问题解决了