我已经开始学习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数据进行排序/排序?
3条答案
按热度按时间icnyk63a1#
以下是我们任务的解决方案:
我们必须:
选择如下字段:
增强查询字段,如:
并按分数排序:
在solr架构中:
2skhul332#
您可以为solr提供一组排序条件:
... 这将给你所有的溢价职位,然后所有的非溢价职位,而被订购
date_created
在每组内部。这假设您已经将solr中的boolean字段索引为boolean/int字段。另外,如果为字段启用了docvalues,那么按字段排序会更有效,但是在solr的最新版本中,默认情况下,支持这些字段的字段将启用docvalues。
35g0bw713#
显然,您了解实现目标的sql技巧。
我不知道solr,但对于第三方软件来说,这听起来相当复杂。如果有一种方法可以手工编写sql代码(让solr简单地传递它),我建议您这样做。