我已经开始学习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 数据进行排序/排序?
这是我们任务的解决方案:
我们必须:
选择以下字段:
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"/>
显然,您了解实现目标的SQL技巧。
我不知道Solr,但对于第三方软件来说,这听起来相当复杂。 如果有一种方法可以手动编写SQL(并让Solr简单地传递它(,我建议你这样做。
你可以给Solr一组排序标准:
&sort=premium desc, date_created desc
。这将首先为您提供所有高级帖子,然后是所有非高级帖子,同时按每个组内的date_created
排序。
这假设您已将 Solr 中的布尔字段索引为布尔/整数字段。此外,如果您为这些字段启用了 docValues,则按字段排序效率更高,但默认情况下,对于最新版本的 Solr 中支持它们的字段,这将处于启用状态。