2008-09-18 97 views
2
我使用的是FullTextSqlQuery在SharePoint 2007(MOSS),需要通過兩列命令的結果

秩序的SharePoint搜索結果:由多個列

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

但是似乎從ORDER BY僅第一列在返回結果時要考慮到。在這種情況下,結果由作者正確排序,但不排序。如果我更改訂單,結果將按Rank排序,但不會由作者排序。

我不得不求助於我自己對結果的排序,我不太喜歡。有沒有人可以解決這個問題?

編輯:不幸的是,它也不接受ORDER BY子句中的表達式(SharePoint引發異常)。我的猜測是,即使查詢看起來像合法的SQL,它在被提供給SQL服務器之前也會被解析。

我試圖用SQL Profiler來捕獲查詢,但無濟於事。

編輯2:最後,我使用單列(作者在我的情況,因爲它是最重要的)排序,並在結果的TOP N代碼中做第二次排序。對於這個項目來說足夠好,但是卻留下了糟糕的代碼感。

回答

2

微軟最後發佈了關於此問題的知識庫文章。

「當ORDER使用RANK通過SharePoint搜索查詢的WHERE子句,沒有其他屬性,應使用」

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

症狀:當在ORDER使用RANK通過SharePoint搜索查詢的WHERE子句結果中只使用第一個ORDER BY列。

原因:RANK是排列在全文索引中的特殊屬性,因此不能與其他託管屬性一起使用。

解決方案:不要將多個屬性與RANK屬性結合使用。

0

我對SharePoint沒有經驗,但是如果是隻有一個ORDER BY子句的情況下,我會將其更改爲表達式而不是列。假設「等級」是具有10的最大值的數值列以下可能工作:

SELECT WorkId FROM SCOPE() ORDER BY AUTHOR + (10 - Rank) ASC 
1

排名是在MOSS FullTextSqlQuery一個特殊的列得到的數值給每個結果的等級。該值對於每個查詢將是不同的,並且對於該特定查詢的其他結果是相對於。由於這個排名應該對每個結果都有一個獨特的價值,並且按排名排序,那麼作者就和按排名排序一樣。我會嘗試對另一列進行排序,而不是排名,以查看結果是否按照您的預期返回,如果是這樣,您的問題可能與MOSS排名結果的方式有關,而每個獨立查詢的結果會有所不同。

另外你是對的,查詢看起來像SQL,但它並不是實際傳遞給SQL服務器的查詢,它是特殊的Microsoft企業級搜索SQL查詢語法。