2008-09-18 7 views
2

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

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

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

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

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

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

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

ответ

2

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

«При использовании RANK в ORDER BY пунктом в SharePoint Поисковый запрос, никакие другие свойства не должны быть использованы»

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

Симптом: При использовании RANK в ORDER BY пунктом в SharePoint Поисковый запрос в результатах используется только первый столбец 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-сервер, это специальный синтаксис SQL Enterprise SQL Enterprise Search.

1

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

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

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

Смежные вопросы