FullTextQuery - 如果对象太多则异常

时间:2011-03-17 13:30:52

标签: nhibernate lucene.net nhibernate.search

此代码可以正常工作:

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 server抛出异常。一种有效的解决方案是使用相当慢的分页来获取所有对象。有更好的解决方案吗?

感谢。

C

1 个答案:

答案 0 :(得分:0)

如果我没记错的话,fullTextQuery.List()会做一个大的

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

其中id1,id2 ...是参数,在SQL Server中该数量是有限的。这样,您就可以从lucene文档中获得NHibernate实体。长话短说,除了分页之外没有解决方法。

如果你真的需要获取这么多数据,你可以使用1000个元素的页面大小。

获取1000个实体在某个地方会很慢:当你在屏幕上显示它们时,例如。