solr有多个排序结果,但first premium(true)发布

63lcw9qa  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(266)

我已经开始学习solr,并尝试理解和实现与mysql中相同的查询,以相同的顺序和逻辑返回结果。
我需要的是:
返回所有的第一个职位标记为溢价(布尔,真),然后其他
按创建日期排序/排序新建>旧。。
默认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数据进行排序/排序?

icnyk63a

icnyk63a1#

以下是我们任务的解决方案:
我们必须:
选择如下字段:

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

2skhul332#

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

&sort=premium desc, date_created desc

... 这将给你所有的溢价职位,然后所有的非溢价职位,而被订购 date_created 在每组内部。
这假设您已经将solr中的boolean字段索引为boolean/int字段。另外,如果为字段启用了docvalues,那么按字段排序会更有效,但是在solr的最新版本中,默认情况下,支持这些字段的字段将启用docvalues。

35g0bw71

35g0bw713#

显然,您了解实现目标的sql技巧。
我不知道solr,但对于第三方软件来说,这听起来相当复杂。如果有一种方法可以手工编写sql代码(让solr简单地传递它),我建议您这样做。

相关问题