在Solr中没有分组/字段折叠的排序有问题

时间:2014-07-15 22:05:33

标签: solr solrnet

是否可以在没有字段折叠的情况下在solr中进行复合排序?

如果我有两款车型,福特和雪佛兰,我可以先选择价格低于2,000的福特汽车,然后福特> 2000,然后是雪佛兰车型?我想在没有分组的情况下这样做,并且不对Chevy模型进行价格分类。

例如&sort=Model:"Ford" AND price:[0 TO 2000]

之类的内容

所以我得到:

Ford 1, $1000
Ford 2, $500
Ford 2, $1500
_________
Ford 3, $3000
Ford 3, $5000
_______
Chevy 1
Chevy 2
Chevy 3

1 个答案:

答案 0 :(得分:0)

我已经对此进行了修改,并且我已经提出了基于query()函数的解决方案,因为您可以将它与排序一起使用。我不确定性能,并且根据索引中的文档数量,这可能并不重要,所以唯一的方法是尝试它并查看它是否有效。我已使用nameprice作为架构中的两个字段,我认为这些字段会映射到您的Modelprice字段。

sort的工作方式是按顺序评估每个子句,以便首先执行第一个排序描述,然后执行下一个描述,如果有绘制,依此类推。

我删除了网址转义并将所有内容格式化了一下:

sort=query($sq1,0) asc,query($sq2,0) asc
     &sq1=name:Ford* AND price:[0 TO 1500]
     &sq2=name:Ford*

这意味着第一次排序是针对sq1=网址参数中指定的查询执行的,但是如果有'抽奖'(如果没有匹配则会有),将执行在sq2=下命名的查询($sq1并且$sq2将这些查询引用到查询,并且在评估query()函数之前,Solr将进行简单替换。 / p>

我还没有提供默认排序顺序,但您可以添加name asc作为默认排序。 0作为query()的第二个参数是排序将在查询中没有匹配时使用的值(否则它将使用查询中的分数)。您可以将此值提取到product()并乘以价格,以对每个"桶进行排序"如果需要,也可以price