我正在开发一个结构化的文档查看器,其中每个solr文档都是一组法律文档中的“部分”或“段落”,以及各种元数据。我有一个语料库,它可能代表这些部分的10^12或更多。我想为用户提供分页,以便他们可以在
sort_path
秩序。
现在的问题是:即使
分类路径
是索引的,有文档一直在添加和删除。一个简单的排序和分页解决方案最终将导致用户可能会意外地跳过部分或在排序过程中跳来跳去,即使他们不在排序过程中添加/删除的文档附近;这种行为是不可接受的。
示例:我使“下一页”链接指向
...sort_order=sort_path+desc&rows=N&start:12345
. 然后,当用户查看页面时,将删除排序路径顺序中的早期文档。现在,当他们获取下一个n行时,他们将跳过1个不知道的文档。
所以,如果我有
分类路径
字段,用于订购部分,前端需要能够要求“之前”或“之后”有n个部分
sort_path:/X/Y/Z
而不是要求
rows:N
具有
start:12345
. 我不知道如何在solr查询中表示这一点。
我可能把solr的边缘推得有点远了,最终可能会更有意义地将这些“部分”文档的表示存储在solr(对于内容搜索,solr非常擅长)和RDBMS(对于排序和索引)。我本来想避免这种情况,但这种查询在数据库中仍然很难看,所以也许你有一些想法。(谢谢!)
更新:
事实证明,结合排序的solr范围可以给我确切的需要。在索引字段上,我可以执行如下操作
sort_path:["/A/B/C" TO *]
获取“下一个”n节,然后
sort_path:[* TO "/A/B/C"]
按序排序
sort_path:desc
然后反转返回的块以获取前面的n个部分。我将测试这个解决方案的性能,但它似乎是可行的。