2011-01-18 8 views
6

私はSQL Serverの全文検索を使い慣れていません。検索エンジンが使用するように、屈折型エンジンを使用して複数の単語を検索する最良の方法を見つけようとしています。すべての言葉の様々な形。複数の検索語にCONTAINS、FORMSOF、NEARを使用したSQL Serverのフルテキスト検索

私が読んだところから、FREETEXTは複数の単語を使用すると暗黙のORを使います。検索結果にすべての単語が含まれるようにANDが必要なので、このためにCONTAINSを使用することを選択しています。

私は以下のようなクエリを実行しようとしていますが、FORMSOFと近接キーワードNEARを複数の単語に使用しています。これは有効な構文ではなく、エラーを返すことに注意してください:

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

しかし、作品の下のクエリが、それは意図した結果が得られるかどうかは知りません。 SQLの全文検索で「AND」と「NEAR」の違いはありますか?

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

は、私は私が求めています何を、使用する方法があるCONTAINS、FORMSOF、およびNEAR複数の検索語を推測しますか?または、私はちょうど "AND"を使用する上記の2番目のクエリを使用する必要がありますか?ドキュメントから

答えて

9

<proximity_term> ::= 
    { <simple_term> | <prefix_term> } 
    { { NEAR | ~ } 
    { <simple_term> | <prefix_term> } 
    } [ ...n ] 

これは、あなたが(可能な接頭辞)の単語、フレーズとその組み合わせのためNEAR述語を使用できることを意味します。

検索用語が非常に簡単なルールを使用して屈曲しているので、あなただけ使用することができ接頭辞:

SELECT * 
FROM content 
WHERE CONTAINS((Title,Subtitle,Body), 'model* NEAR airplane*') 

またはANDを使用して、クライアント側で細かいフィルタリングを行う

SELECT * 
FROM ft 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, "model") AND FORMSOF(INFLECTIONAL, "airplane")') 
関連する問題