Упорядочить результаты поиска SharePoint по большему количеству столбцов - PullRequest
2 голосов
/ 18 сентября 2008

Я использую FullTextSqlQuery в SharePoint 2007 (MOSS) и мне нужно упорядочить результаты по двум столбцам:

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

Однако, по-видимому, при возврате результатов учитывается только первый столбец из ORDER BY. В этом случае результаты упорядочены по автору, а не по рангу. Если я изменю порядок, результаты будут упорядочены по рангу, а не по автору.

Мне пришлось прибегнуть к собственной сортировке результатов, которая мне не очень нравится. У кого-нибудь есть решение этой проблемы?

Редактировать : К сожалению, он также не принимает выражения в предложении ORDER BY (SharePoint вызывает исключение). Я предполагаю, что даже если запрос выглядит как законный SQL, он каким-то образом анализируется перед тем, как его отправляют на сервер SQL.

Я пытался перехватить запрос с помощью SQL Profiler, но безрезультатно.

Редактировать 2 : В конце концов, я использовал упорядочение по одному столбцу (в моем случае это Автор, так как он наиболее важен) и выполнил второе упорядочение в коде на TOP N результатов. Работает достаточно хорошо для проекта, но оставляет плохое чувство неаккуратного кода.

Ответы [ 4 ]

2 голосов
/ 04 мая 2009

Microsoft наконец-то опубликовал статью базы знаний по этой проблеме.

"При использовании RANK в предложении ORDER BY запроса поиска SharePoint никакие другие свойства использовать нельзя"

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

Симптом: при использовании RANK в предложении ORDER BY запроса поиска SharePoint в результатах используется только первый столбец ORDER BY.

Причина: RANK - это специальное свойство, которое ранжируется в полнотекстовом индексе и, следовательно, не может использоваться с другими управляемыми свойствами.

Решение. Не используйте несколько свойств вместе со свойством RANK.

1 голос
/ 30 сентября 2008

Ранг - это специальный столбец в MOSS FullTextSqlQuery, который присваивает числовое значение рангу каждого результата. Это значение будет отличаться для каждого запроса и будет относительно к другим результатам для этого конкретного запроса. Поскольку этот ранг должен иметь уникальное значение для каждого результата, а сортировка по рангу, то автор будет такой же, как и просто сортировка по рангу. Я бы попробовал отсортировать по другому столбцу вместо ранга, чтобы увидеть, вернутся ли результаты, как вы ожидаете, если это так, ваши проблемы могут быть связаны с тем, как MOSS ранжирует результаты, которые будут различаться для каждого уникального запроса.

Также вы правы, запрос выглядит как SQL, но это не запрос, фактически переданный на сервер SQL, а специальный синтаксис SQL-запроса Microsoft Enterprise Search.

1 голос
/ 30 января 2009

У меня тоже такая же проблема с FullTextSqlQuery и MOSS 2007, где учитывается только первый столбец в многостолбцовом "ORDER BY".

Я вошел в эту тему на форумах MSDN для поиска SharePoint, но не получил ни одного ответа:

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

0 голосов
/ 18 сентября 2008

У меня нет опыта работы с SharePoint, но если это тот случай, когда соблюдается только одно предложение ORDER BY, я бы изменил его на выражение, а не на столбец. Предполагая, что «Ранг» - это числовой столбец с максимальным значением 10, может работать следующее:

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