使用CONTAINS,FORMSOF,NEAR进行多个搜索词的SQL Server全文搜索

n3w*_*n23 7 t-sql sql-server full-text-search sql-server-2005 formsof

我是SQL Server全文搜索的新手,我正在尝试找出使用屈折引擎搜索多个单词的最佳方法,以便搜索使用所有单词的各种形式.

根据我的阅读,当与多个单词一起使用时,FREETEXT使用隐式OR.我想要一个AND,以便搜索结果包含所有单词,因此我选择使用CONTAINS.

我正在尝试执行类似下面的查询,它使用FORMSOF和邻近关键字NEAR用于多个单词.请注意,这不是有效的语法并返回错误:

select top 5 *
from content
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model NEAR airplane)')
Run Code Online (Sandbox Code Playgroud)

但是,下面的查询有效,但我不知道它是否给出了预期的结果.SQL全文搜索"AND"和"NEAR"之间有区别吗?

select top 5 *
from content
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model) AND FORMSOF(INFLECTIONAL, airplane)')
Run Code Online (Sandbox Code Playgroud)

我想我要问的是,有没有办法使用CONTAINS,FORMSOF和NEAR多个搜索词?或者我应该使用上面使用"AND"的第二个查询?

Qua*_*noi 10

来自文档:

<proximity_term> ::= 
     { <simple_term> | <prefix_term> } 
     { { NEAR | ~ }
     { <simple_term> | <prefix_term> } 
     } [ ...n ] 
Run Code Online (Sandbox Code Playgroud)

这意味着您可以使用NEAR谓词(可能的前缀)单词,短语及其组合.

由于您的搜索字词使用非常简单的规则变换,您可以使用前缀:

SELECT  *
FROM    content
WHERE   CONTAINS((Title,Subtitle,Body), 'model* NEAR airplane*')
Run Code Online (Sandbox Code Playgroud)

或者AND在客户端使用并进行精细过滤

SELECT  *
FROM    ft
WHERE   CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, "model") AND FORMSOF(INFLECTIONAL, "airplane")')
Run Code Online (Sandbox Code Playgroud)