【问题标题】:Solr Merge two queries and then do paginationSolr 合并两个查询,然后进行分页
【发布时间】:2016-03-08 16:11:02
【问题描述】:

伙计们,

我们在 solr 中有一个需求,我们想要合并两个查询的结果。

例如
查询一返回[document1,document2,document3,document4]

第二个查询返回 [document3,document4,document5,document6]

我们希望结果按以下顺序 [document1,document2,document3,document4,document5,document6]

基本上第一个查询的结果应该优先,第二个查询的结果应该删除重复项。

我们还希望在 solr 级别进行分页,因为它为每个查询返回 100 万个文档。

查询:

1) 如何创建多个查询一起执行并按顺序获取结果。 (第一个查询结果应该首先出现。从第二个查询重复应该被删除)

2) 我们想要对整个结果集的数据进行分页,因此我们不能一个一个地执行。我们有什么办法可以做到这一点?

【问题讨论】:

    标签: solr solrj


    【解决方案1】:

    1) 您不能在 Solr 中执行此操作。您必须在您的应用级别添加此逻辑。
    因此,请照常执行两个 solr 查询,然后将这两个集合相交。

    2) 使用参数&rows=<no. of rows> 执行两个查询,因此每个查询最终只能获得 5-10 行(或根据需要),然后与这些较小的集合相交。

    【讨论】:

    • Binoy 感谢您的回复。我们也想做分页,所以事先我们应该知道两个查询中有多少条记录(例如,我们需要投影 1000 条记录,就像有 10 个页面,每个页面有 100 个项目)。我觉得通过一些解决方法应该是可行的
    • 有人对此有任何想法
    • @MihirkumarJoshi 正如 Binoy 所说,如果您希望每个页面有 100 个项目,您应该添加一个参数 rows=100&start=0。 --- 然后当用户询问下一页时,您只需运行相同的查询,将 100 添加到启动参数 (rows=100&start=100 ; rows=100&start=200)...如果您想向用户显示那里有多少页,之后第一个查询,您只需计算 numFound/rows 向上取整(numFound 在 solr 响应中)。 --- 这适用于 1 个查询,因为您要合并两个查询,您应该划分行并从 2 开始(rows=50&start=0/50/100...)
    猜你喜欢
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2016-10-13
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多