Solr有多种排序结果,但有第一批(true)帖子

Sal*_*nes 5 mysql solr

我已经开始学习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 
Run Code Online (Sandbox Code Playgroud)

和带有搜索参数的示例:

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
Run Code Online (Sandbox Code Playgroud)

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

Sal*_*nes 2

这是我们任务的解决方案:

我们必须:

选择字段,例如:

fl=score,*
Run Code Online (Sandbox Code Playgroud)

增强查询字段,例如:

bq=source:local^50 (premium:true^100 OR premium:false^0)
Run Code Online (Sandbox Code Playgroud)

并按分数排序:

sort=score DESC, created DESC
Run Code Online (Sandbox Code Playgroud)

在solr 模式中:

<field name="premium" type="boolean" indexed="true" stored="true"/>
Run Code Online (Sandbox Code Playgroud)