我们有一个 SQL Server 数据库,其中包含由Lucene.net
through索引的数百万条记录Nhibernate.Search
。当我们为我们的类建立索引时,我们试图扩大范围,因为索引/检索的成本非常小。目标是在带有分页的网页上为用户提供全文搜索。
由于 SQL Server 在向其发送太多参数时会抱怨(默认为 2100 个参数),并且由于我们不想在每次达到限制时更改该参数(这很容易发生,我们文档中的某些术语非常常见但必须可搜索)我们决定在 Lucene 中处理从排序到分页的所有事情。它就像一个魅力。
然而,最近,特性蠕变给我们带来了一些问题,因为新查询不仅需要访问未编入索引的字段,还需要访问不应访问或无法访问的字段:计算字段、推荐列表等。 ..
既然我们已经将所有的分页和排序都放在了 Lucene.Net 中,而且 SQL Server 对它的参数很挑剔,那么我们如何才能做到既吃又吃呢?
我正在考虑首先进行 sql 查询计算,将元素减少到它们的 doc id,然后为 Lucene 提供一个带有所有可能 id 的巨大 OR 查询,让它正确选择可能的内容,但我担心查询大小
伪代码
listIds = Nhibernate.Criteria.ReduceToIds.List(of MyObject)
queryIds = String.join(" ID:", l)
return NHibernate.Search(queryIds)
显然,可以通过只允许某些文档 ID 作为查询的一部分来使 Lucene 过滤器工作,所以应该是可能的,但我真的没有在 Nhibernate.search 中看到这样做的方法
你知道我应该如何处理这个问题吗?是否可以通过向 SQL 询问 id 列表来过滤查询?是不是矫枉过正?还有其他解决方案吗?