假设我有一个像下面这样的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
我正在研究功能查询,自定义插件。看来插件可以获得结果文档分数,但我不确定如何重新排序文档。
我很感激你的一些指示,谢谢。
答案 0 :(得分:0)
使用CustomScoreQuery和CustomScoreProvider。添加一个整数优先级字段,其值(高= 3,中= 2,低= 1)到您的文档中,以便缓存并在评分计算中使用它。
{{1}}
还考虑编写QParserPlugin以使用CustomScoreQuery。有关更多信息,请参阅此链接。 http://spykem.blogspot.com/2013/06/plug-in-external-score-to-solr.html