2

これら2つのステートメントが異なる動作をする理由を理解しようとしています

個別のフィールド 1、フィールド 2 を選択
FROM SomeTable
WHERE CONTAINS(*,'WORD1') AND CONTAINS(*,'WORD2*') AND CONTAINS(*,'WORD3')
個別のフィールド 1、フィールド 2 を選択
FROM SomeTable
WHERE CONTAINS(*,'"WORD1" AND "WORD2*" AND "WORD3"')

全文検索にすべてのインデックス付きフィールドを指定しているのに、2 番目のコマンドでは何も返されず、最初のコマンドでは期待どおりの結果が返されるのはなぜですか? 1 つの CONTAINS ステートメントで、いずれかのフィールドに WORD1 と WORD2 と WORD3 が含まれるすべてのフィールドを検索したいと考えています。

4

2 に答える 2

1

以前にこの問題に遭遇したことがありますが、これは仕様によるものです。この MS サポート記事を参照してください。

c1 と c2 の 2 つの列があるとします。リストしたクエリ

CONTAINS(*,'"WORD1" AND "WORD2*" AND "WORD3"')

と解釈されます

CONTAINS(c1,'"WORD1" AND "WORD2*" AND "WORD3"') or CONTAINS(c2,'"WORD1" AND "WORD2*" AND "WORD3"')

したがって、すべての単語はいずれかの列 (c1 または c2) にある必要があります。WORD1 が c1 にあり、WORD3 が c2 にある場合、結果は返されません。

最初のクエリは次のように解釈されるため機能します

(CONTAINS(c1,'WORD1') OR CONTAINS(c2,'WORD1')) AND (CONTAINS(c1,'WORD2*') OR CONTAINS(c2,'WORD2*')) AND (CONTAINS(c1,'WORD3') OR CONTAINS(c2,'WORD3'))

この場合 (最初のケース)、すべての単語が少なくとも 1 つの列に存在する限り、異なる単語が異なる列に存在できます。

于 2013-07-17T18:07:44.333 に答える
0

2 番目のステートメントは、文字列 <"WORD1" AND "WORD2*" AND "WORD3"> 全体を検索しているようです。そのため、結果は返されません。また、書かれているように、最初は二重引用符で <"WORD1"> を検索することにもなります。<"WORD1"> の結果が返されますか?

于 2013-07-17T17:08:18.573 に答える