IFullTextQuery - исключение, если есть слишком много объектов - PullRequest
0 голосов
/ 17 марта 2011

Этот код работает нормально:

Query query = parser.Parse(expression);

IFullTextSession session = Search.CreateFullTextSession(this.Session);

IFullTextQuery fullTextQuery = session.CreateFullTextQuery(query, new[] { typeof(MappedSequence) });

var l1 = fullTextQuery.List();

, если запрос не возвращает слишком много объектов.Если запрос содержит слишком много объектов, сгенерированный SQL-код слишком длинный и SQL-сервер выдает исключение.Одним из рабочих решений является получение всех объектов с использованием подкачки, что довольно медленно.Есть ли лучшее решение?

Спасибо.

C

1 Ответ

0 голосов
/ 02 апреля 2011

Если я правильно помню, fullTextQuery.List () делает большое

select ... where ID_COL IN ( id1, id2, id3, id4 ... )

, где id1, id2 ... - параметры, число которых ограничено в SQL Server.Таким образом, вы получаете сущности NHibernate из документов Lucene.Короче говоря, обходного пути нет, кроме пейджинга.

Вы можете использовать размер страницы в 1000 элементов, если вам ДЕЙСТВИТЕЛЬНО нужно получить столько данных.

Получение 1000 объектов будет где-то медленным: например, при отображении их на экране.

...