Упорядочивайте результаты поиска SharePoint по большему количеству столбцов

StackOverflow https://stackoverflow.com/questions/91800

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Правка 2:В конце концов, я использовал упорядочение по одному столбцу (в моем случае по автору, поскольку это наиболее важно) и выполнил второе упорядочение в коде в ВЕРХНЕЙ части N результатов.Работает достаточно хорошо для проекта, но оставляет неприятное ощущение запутанности кода.

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

Я тоже сталкиваюсь с той же проблемой с FullTextSqlQuery и MOSS 2007, где соблюдается только первый столбец в многоколоночном "ПОРЯДКЕ ПО".

Я ввел эту тему в MSDN Forums for SharePoint Search, но не получил никаких ответов:

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

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

SELECT WorkId FROM SCOPE() ORDER BY AUTHOR + (10 - Rank) ASC
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top