SQL Server全文搜索完整的句子

时间:2017-09-27 07:17:32

标签: sql full-text-search azure-sql-database

我有一个Azure SQL数据库并尝试了全文搜索。 有可能搜索完整的句子吗?

E.g。使用LIKE-operator进行查询(但可能不像全文搜索那样快):

SELECT Sentence
FROM Sentences
WHERE 'This is a whole sentence for example.' LIKE '%'+Sentence+'%'

将返回:“整句话”

我需要全文搜索这样的东西:

SELECT Sentence
FROM Sentences
WHERE FREETEXT(WorkingExperience,'This is a whole sentence for example.')

这将返回单词上的每个匹配,但不会返回完整句子。 例如。将返回:“整句话”和“另一句话”。

这可能吗?还是我必须使用LIKE-operator?

2 个答案:

答案 0 :(得分:1)

你试过这个:

SELECT Sentence
FROM Sentences
WHERE FREETEXT(WorkingExperience,'"This is a whole sentence for example."')

如果上述方法无效,您可能需要使用AND运算符构建正确的FTS搜索字符串,如下所示:

SELECT Sentence
FROM Sentences
WHERE FREETEXT(WorkingExperience,'"This" AND "is" AND "a" AND "whole" 
                    AND "sentence" AND "for" AND "example."')

另外,为了更精确地匹配,我建议使用CONTAINSCONTAINSTABLE

SELECT Sentence
FROM Sentences
WHERE CONTAINS(WorkingExperience,'"This is a whole sentence for example."')

HTH

答案 1 :(得分:0)

如果其他人对此感兴趣,请链接到具有示例的好文章:

https://www.microsoftpressstore.com/articles/article.aspx?p=2201634&seqNum=3

您可以从示例中选择最佳方法来满足您的需求。

对于我来说,匹配整个句子可以很容易地通过另一个答案中提到的以下where子句完成:

WHERE CONTAINS(WorkingExperience,'"This is a whole sentence for example."')

如果您需要查找所有单词,但用户可能会以不正确的顺序输入它们,我建议使用

WHERE CONTAINS(WorkingExperience, N'NEAR(This, whole, sentence, is, a, for, example)')

您还可以用其他方法完成上面的文章。如果需要根据命中分数/排名对结果进行排序,则需要使用CONTAINSTABLE而不是CONTAINS。