Solr 中的表达式排序
在 SQL 中,您可以通过如下表达式进行排序:
SELECT * FROM a
ORDER BY CASE WHEN a.Category = 20 THEN 1 ELSE 0 DESC
因此 Category = 20 的记录位于顶部。
这在 Solr 中可能吗?
In SQL you can order by an expression like:
SELECT * FROM a
ORDER BY CASE WHEN a.Category = 20 THEN 1 ELSE 0 DESC
so records who have Category = 20 are on top.
Is this possible in Solr?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Solr 没有 if/then(至少在 4.0 之前没有),但它确实有一个映射函数,并且能够在您的 函数查询 href="http://wiki.apache.org/solr/CommonQueryParameters" rel="noreferrer">排序。您可能可以在排序中使用类似的东西来实现您所追求的目标:(
未经测试)
这是一个讨论 将映射用于 if 语句。
Solr doesn't have an if/then (at least not until 4.0), but it does have a map function and the ability to use function queries in your sort. You can probably use something like this in your sort to achieve what you're after:
(untested)
Here is a thread that talks about using map for an if statement.
我已经接受了 hross 的答案,但也可以在 Solr 1.3 及更高版本中执行类似的操作,使用:
很酷的事情是您仍然可以对其他字段进行排序,因此:
I've accepted hross's answer, but it's also possible to do something like this in Solr 1.3 and up, using:
The cool thing is that you can still sort on other fields, so:
如果您使用的是 dismax 请求处理程序,那么您可以以类似的方式使用 boost 查询。 http://wiki.apache.org/solr/DisMaxQParserPlugin#bq_.28Boost_Query.29 请注意,这与您的 SQL 示例的功能并不完全相同,但您可以使用它获得相同的结果。
If you are using the dismax request handler, then you can use boost queries in a similar fashion. http://wiki.apache.org/solr/DisMaxQParserPlugin#bq_.28Boost_Query.29 Note that this doesn't function exactly like the your SQL example, but you can achieve the same results with it.