Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Solr有多个排序结果,但第一个高级(true)帖子_Mysql_Solr - Fatal编程技术网

Mysql Solr有多个排序结果,但第一个高级(true)帖子

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

我已经开始学习Solr,并尝试理解和实现与mysql中相同的查询,以相同的顺序和逻辑返回结果

我需要的是:

  • 返回所有的第一个帖子标记为高级(bool,true),然后是其他帖子
  • 按创建日期对所有内容进行排序/排序新建>旧
默认mysql示例查询/不带搜索参数:

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"/>


感谢您的重播,但以这种方式排序不会返回正确的结果。我们必须提高结果,请参阅下面的解决方案。