我有一个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?
答案 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."')
另外,为了更精确地匹配,我建议使用CONTAINS或CONTAINSTABLE:
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。