Solr多重排序结果,但第一个高级(真实)帖子

时间:2018-06-18 09:03:52

标签: mysql solr

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

我需要什么:

  • 首先返回标记为premium(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 

以及搜索参数的示例:

SELECT 
  MATCH (Postings.title) AGAINST ('developer' IN BOOLEAN MODE) AS `Postings__relavance_title`, 
  MATCH (Postings.description) AGAINST ('developer' IN BOOLEAN MODE) AS `Postings__relavance_description`, 
  // other Fields 
FROM 
  postings Postings 
  // LEFT JOIN queries ...
WHERE 
  (
    MATCH (
      Postings.title, Postings.description
    ) AGAINST ('developer' IN BOOLEAN MODE) 
  ) 
ORDER BY 
  (Postings__relavance_title * 2)+ Postings__relavance_description DESC, 
  Postings.premium DESC, // <--- bool (1)
  FIELD(Postings.source, "local") DESC, 
  Postings.cpc DESC

如何以相同方式对solr数据进行排序/排序?

3 个答案:

答案 0 :(得分:0)

您显然了解实现目标的SQL技巧。

我不了解Solr,但是对于第三方软件来说,这听起来很复杂。如果可以手动编码SQL(并让Solr简单地传递它),我建议您采用这种方式。

答案 1 :(得分:0)

您可以为Solr提供一组排序条件:

&sort=premium desc, date_created desc

...这将首先为您提供所有高级职位,然后是所有非高级职位,同时按date_created在每个组内进行排序。

这假定您已将Solr中的布尔字段索引为布尔/ int字段。另外,如果为这些字段启用了docValues,则按字段进行排序会更有效,但是默认情况下,对于最新版本的Solr中支持它们的字段,此功能将处于启用状态。

答案 2 :(得分:0)

以下是我们任务的解决方案:

我们必须:

选择字段,例如:

fl=score,*

提升查询字段,例如:

bq=source:local^50 (premium:true^100 OR premium:false^0)

按分数排序

sort=score DESC, created DESC

solr模式中

<field name="premium" type="boolean" indexed="true" stored="true"/>