Nhibernate 搜索:如何管理复杂的搜索?

Nhibernate 搜索:如何管理复杂的搜索?,nhibernate,lucene.net,nhibernate.search,Nhibernate,Lucene.net,Nhibernate.search,我们有一个SQL Server数据库,它有一百万条ish记录,这些记录由Lucene.net通过Nhibernate.Search索引。当我们为我们的类建立索引时,我们试图扩展,因为索引/检索的成本非常小。其目标是在带有分页的网页上为用户提供全文搜索 由于SQL Server在向其发送太多参数(默认情况下为2100个参数)时会抱怨,而且我们不希望每次达到限制时都更改该参数(这很容易发生,文档中的某些术语非常常见,但必须可搜索)我们决定在Lucene中处理从排序到分页的所有事情。它就像一个符咒 然

我们有一个SQL Server数据库,它有一百万条ish记录,这些记录由
Lucene.net
通过
Nhibernate.Search
索引。当我们为我们的类建立索引时,我们试图扩展,因为索引/检索的成本非常小。其目标是在带有分页的网页上为用户提供全文搜索

由于SQL Server在向其发送太多参数(默认情况下为2100个参数)时会抱怨,而且我们不希望每次达到限制时都更改该参数(这很容易发生,文档中的某些术语非常常见,但必须可搜索)我们决定在Lucene中处理从排序到分页的所有事情。它就像一个符咒

然而,最近,特性爬行给我们带来了一些问题,因为新的查询不仅需要访问未编入索引的字段,还需要访问不应该访问或无法访问的字段:计算字段、推荐列表等

既然我们已经将所有的分页和排序都放在了Lucene.Net中,而且SQL Server对其参数很挑剔,那么我们怎么能既有蛋糕又有蛋糕呢

我正在考虑首先进行sql查询计算,将元素减少到它们的文档id,然后向Lucene提供一个包含所有可能id的巨大OR查询,以便它正确选择可能的内容,但我担心查询的大小

伪码

显然,Lucene过滤器可以通过只允许某些文档ID作为查询的一部分来工作,所以这应该是可能的,但我在Nhibernate.search中没有找到这样做的方法


你知道我该如何处理这个问题吗?是否可以通过询问SQL ID列表来过滤查询?是不是太过分了?还有其他解决方案吗?

当Lucene.Net返回超过2100个结果时,通常会出现问题,如NHibernate。搜索将从T中构建一个大的SELECT*,其中ID位于(@p0,@p1…)

因此,如果您的lucene查询返回的结果不超过2100个,您应该可以

listIds = Nhibernate.Criteria.ReduceToIds.List(of MyObject)
queryIds = String.join(" ID:", l)
return NHibernate.Search(queryIds)