【发布时间】:2010-10-19 08:48:41
【问题描述】:
我们有一个 SQL Server 数据库,其中包含由 Lucene.net 到 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 列表来过滤查询?是不是矫枉过正?还有其他解决方案吗?
【问题讨论】:
标签: nhibernate lucene.net nhibernate.search