2

SharePoint 2007 (MOSS) で FullTextSqlQuery を使用しており、結果を 2 列で並べ替える必要があります。

SELECT WorkId FROM SCOPE() ORDER BY Author ASC, Rank DESC

ただし、結果を返すときに ORDER BY の最初の列のみが考慮されるようです。この場合、結果はランク順ではなく、作成者順で正しく並べられます。順序を変更すると、結果は作成者ではなくランク順になります。

結果を自分でソートする必要がありましたが、これはあまり好きではありません。これに対する解決策はありますか?

編集: 残念ながら、ORDER BY 句の式も受け入れません (SharePoint は例外をスローします)。私の推測では、クエリが正当な SQL のように見えても、SQL サーバーに提供される前に何らかの方法で解析されます。

SQL プロファイラーでクエリをキャッチしようとしましたが、役に立ちませんでした。

編集 2 : 最後に、単一の列 (私の場合は最も重要なので作成者) による順序付けを使用し、結果の TOP N でコードで 2 番目の順序付けを行いました。プロジェクトとしては十分に機能しますが、コードがぎこちなく感じられます。

4

4 に答える 4

2

マイクロソフトは、この問題に関するナレッジベースの記事を最終的に投稿しました。

「SharePoint 検索クエリの ORDER BY 句で RANK を使用する場合、他のプロパティは使用しないでください」

http://support.microsoft.com/kb/970830

以前の動作: SharePoint 検索クエリの ORDER BY 句で RANK を使用すると、最初の ORDER BY 列のみが結果で使用されます。

原因: RANK は、フル テキスト インデックスでランク付けされる特別なプロパティであるため、他の管理プロパティでは使用できません。

解決策: 複数のプロパティを RANK プロパティと組み合わせて使用​​しないでください。

于 2009-05-04T13:09:27.787 に答える
1

Rank は MOSS FullTextSqlQuery の特別な列で、各結果のランクを数値で示します。その値はクエリごとに異なり、その特定のクエリの他の結果に相対的です。このため、ランクは結果ごとに一意の値を持つ必要があり、ランクによる並べ替えと作成者は、ランクによる並べ替えと同じになります。ランクではなく別の列でソートして、結果が期待どおりに返されるかどうかを確認します。そうである場合、問題は MOSS が結果をランク付けする方法に関連している可能性があります。これは一意のクエリごとに異なります。

また、クエリは SQL のように見えますが、実際に SQL サーバーに渡されるクエリではなく、特殊な Microsoft Enterprise Search SQL クエリ構文です。

于 2008-09-30T18:54:29.627 に答える
1

私も、FullTextSqlQuery と MOSS 2007 で同じ問題を経験しています。ここでは、複数列の "ORDER BY" の最初の列のみが考慮されます。

SharePoint 検索の MSDN フォーラムにこのトピックを投稿しましたが、返信がありません。

http://social.msdn.microsoft.com/Forums/en-US/sharepointsearch/thread/489b4f29-4155-4c3b-b493-b2fad687ee56

于 2009-01-30T18:41:19.117 に答える
0

私は SharePoint の経験がありませんが、ORDER BY 句が 1 つしか受け入れられない場合は、それを列ではなく式に変更します。「ランク」が最大値10の数値列であると仮定すると、次のように機能する可能性があります。

SELECT WorkId FROM SCOPE() ORDER BY AUTHOR + (10 - Rank) ASC
于 2008-09-18T15:20:49.883 に答える