7

私は SQL Server の全文検索を初めて使用し、屈折エンジンを使用して複数の単語を検索する最良の方法を見つけようとしています。これにより、検索ではすべての単語のさまざまな形式が使用されます。

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

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

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 番目のクエリを使用する必要がありますか?

4

1 に答える 1

11

ドキュメントから:

<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")')
于 2011-01-18T17:26:08.463 に答える