想要根据城市来自定义评分,原来的输出:
根据【你好.我是jack】 一共找到3文件
编号:0 分数: 1.0 id: 1 city: 北京编号:1 分数: 1.0 id: 2 city: 南京
编号:2 分数: 1.0 id: 3 city: 上海
自己新建的query对象:
public class MyFieldScoreQuery extends CustomScoreQuery{
public MyFieldScoreQuery(Query subQuery) {
super(subQuery);
}
@Override
protected CustomScoreProvider getCustomScoreProvider(LeafReaderContext context){
return new MyCustomScoreProvider(context);
}
}
覆盖customscoreprovider:
public class MyCustomScoreProvider extends CustomScoreProvider{
public MyCustomScoreProvider(LeafReaderContext context) {
super(context);
}
@Override
public float customScore(int doc, float subQueryScore, float valSrcScore) throws IOException {
IndexReader r = context.reader();
Document d = r.document(doc);
float score = subQueryScore;
if("上海".equals(d.get(“city”))){
score = score*100;
}
return score;
}
}
然后输出如下:
根据【你好.我是jack】 一共找到3文件
编号:2 分数: 100.0 id: 3 city: 上海
编号:0 分数: 1.0 id: 1 city: 北京
编号:1 分数: 1.0 id: 2 city: 南京