Mysql Solr有多个排序结果,但第一个高级(true)帖子
我已经开始学习Solr,并尝试理解和实现与mysql中相同的查询,以相同的顺序和逻辑返回结果 我需要的是:Mysql Solr有多个排序结果,但第一个高级(true)帖子,mysql,solr,Mysql,Solr,我已经开始学习Solr,并尝试理解和实现与mysql中相同的查询,以相同的顺序和逻辑返回结果 我需要的是: 返回所有的第一个帖子标记为高级(bool,true),然后是其他帖子 按创建日期对所有内容进行排序/排序新建>旧 默认mysql示例查询/不带搜索参数: SELECT * FROM postings Postings // LEFT JOIN query .. WHERE ( // where query.. ) ORDER BY Post
- 返回所有的第一个帖子标记为高级(bool,true),然后是其他帖子
- 按创建日期对所有内容进行排序/排序新建>旧
SELECT
*
FROM
postings Postings
// LEFT JOIN query ..
WHERE
(
// where query..
)
ORDER BY
Postings.premium DESC, // <--- bool (1),
FIELD(Postings.source, "local") DESC,
Postings.cpc DESC
选择
*
从…起
张贴
//左联接查询。。
哪里
(
//其中查询。。
)
订购人
Postings.premium DESC,//显然,您了解实现目标的SQL技巧
我不知道Solr,但对于第三方软件来说,这听起来相当复杂。如果有一种方法可以手工编写SQL(并让Solr简单地传递它),我建议您这样做。您可以为Solr提供一组排序标准:
&sort=premium desc, date_created desc
。。。这将首先为您提供所有的高级帖子,然后是所有的非高级帖子,同时在每个组中按date\u创建
进行订购
这假设您已将Solr中的布尔字段索引为布尔/int字段。此外,如果您为这些字段启用了docValues,则按字段排序的效率更高,但在最新版本的Solr中,默认情况下,支持这些字段的字段将启用docValues。以下是我们任务的解决方案:
我们必须:
选择字段如:
fl=score,*
增强查询字段,如:
bq=source:local^50 (premium:true^100 OR premium:false^0)
和按分数排序:
sort=score DESC, created DESC
<field name="premium" type="boolean" indexed="true" stored="true"/>
在解决方案中:
sort=score DESC, created DESC
<field name="premium" type="boolean" indexed="true" stored="true"/>
感谢您的重播,但以这种方式排序不会返回正确的结果。我们必须提高结果,请参阅下面的解决方案。