Solr(4.6.1)在响应之前按自定义字段值重新排序

时间:2015-06-08 04:34:15

标签: solr

假设我有一个像下面这样的ser猫文件

{
    "id": 1,
    "priority": "Low",
    "summary": ".."
},
{
    "id": 2,
    "priority": "Medium",
    "summary": ".."
},
{
    "id": 3,
    "priority": "High",
    "summary": ".."
},
{
    "id": 4,
    "priority": "High",
    "summary": ".."
},
{
    "id": 5,
    "priority": "Low",
    "summary": ".."
},
... other documents ...

如果我发出查询,Solr将返回文档顺序

1 (score 282)
4 (score 212)
5 (score 182)
2 (score 25)
3 (score 13)

按分数desc排序,这是好的。

现在我仍然需要先按分数排序,但附加要求是:

for each score segments, re-order the document using the document priority.

我知道这有点令人困惑,并且不清楚"得分段",但理论上我想申请 https://stats.stackexchange.com/questions/70801/how-to-normalize-data-to-0-1-range 到那些结果得分并将段分成

x >= 0.7
x < 0.7 &  x > 0.3
x <= 0.3

我将得分min = 0,因此归一化得分

1 (normalised score 1)    (segment 1)
4 (normalised score 0.75) (segment 1)
5 (normalised score 0.64) (segment 2)
2 (normalised score 0.08) (segment 3)
3 (normalised score 0.04) (segment 3)

我想要实现的结果是重新排序每个细分,以便结果变为

4 -> 1 -> 5 -> 3 -> 2
instead of
1 -> 4 -> 5 -> 2 -> 3

我正在研究功能查询,自定义插件。看来插件可以获得结果文档分数,但我不确定如何重新排序文档。

我很感激你的一些指示,谢谢。

1 个答案:

答案 0 :(得分:0)

使用CustomScoreQuery和CustomScoreProvider。添加一个整数优先级字段,其值(高= 3,中= 2,低= 1)到您的文档中,以便缓存并在评分计算中使用它。

{{1}}

还考虑编写QParserPlugin以使用CustomScoreQuery。有关更多信息,请参阅此链接。 http://spykem.blogspot.com/2013/06/plug-in-external-score-to-solr.html