首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Solr中不进行分组/字段折叠的情况下无法进行排序

在Solr中不进行分组/字段折叠的情况下无法进行排序
EN

Stack Overflow用户
提问于 2014-07-16 06:05:33
回答 1查看 424关注 0票数 0

有没有可能在solr中进行复合排序而不折叠字段?

如果我有两个车型,福特和雪佛兰,我是否可以先排序价格低于2,000的福特,然后是福特> 2,000,然后是雪佛兰车型?我想在没有分组的情况下做到这一点,并且不将价格排序应用于雪佛兰车型。

例如,像&sort=Model:"Ford" AND price:[0 TO 2000]这样的代码

这样我就能得到:

代码语言:javascript
复制
Ford 1, $1000
Ford 2, $500
Ford 2, $1500
_________
Ford 3, $3000
Ford 3, $5000
_______
Chevy 1
Chevy 2
Chevy 3
EN

回答 1

Stack Overflow用户

发布于 2014-07-17 01:25:31

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

排序的工作方式是按顺序计算每个子句,以便首先执行第一个排序描述,如果有抽签,则执行下一个描述,依此类推。

我删除了url转义,并对所有内容进行了一些格式化:

代码语言:javascript
复制
sort=query($sq1,0) asc,query($sq2,0) asc
     &sq1=name:Ford* AND price:[0 TO 1500]
     &sq2=name:Ford*

这意味着第一个排序是在Solr参数中命名的查询上执行的,但是如果有一个抽签(如果没有匹配,就会有),那么将执行sq2=下命名的查询($sq1$sq2将这些引用到查询中,在计算query()函数之前,Solr将进行一个简单的替换)。

我没有提供默认的排序顺序,但是您可以添加name asc作为默认排序。作为query()的第二个参数的0是一个值,如果查询没有匹配,则排序将使用该值(否则将使用查询的分数)。您可以将该值输入到product()中并与价格相乘,以便在需要时按price对每个“存储桶”进行排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24768982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档