我正在使用SolrJ与Solr实例进行交互 . 我只想获得Solr针对特定搜索查询返回的每个文档的搜索分数 . 如果我使用@Field注释在我的POJO中添加一个得分字段,它在检索文档时完全正常 . 当我尝试通过相同的POJO索引某些内容时,Solr会返回一个错误,指出未知字段“得分”,因为我的Solr架构中没有任何名为“score”的字段 . 但是,如果我在我的Solr架构中添加一个名为“score”的字段,它将开始返回分数的默认值而不是搜索分数 . 请建议我如何解决这个问题 . 我不想逐个遍历所有文档并将分数添加到POJO . 我正在执行以下步骤:
public void getSolrResult(String query) {
SolrQuery query = new SolrQuery();
query.set("q", query);
query.set("fl", "*, score");
QueryResponse queryResponse = solrjClient.query(query);
solrResult = queryResponse.getBeans(PojoSolr.class);
}
Class PojoSolr {
//Other fields
@Field("score")
private float searchScore;
public float getSearchScore(){
return searchScore;
}
public void setSearchScore(float score) {
this.searchScore = score;
}
}
2 回答
我使用继承解决了类似的问题 .
只需将得分字段向下移动到子类 . 使用基类进行索引,使用子类进行查询 .
请注意,反过来也有用例,例如:未存储的字段,因此无法检索,但必须编制索引 . 在这种情况下,包含这些字段的另一个子类
PojoSolrInput
是有意义的 .希望这可以帮助 .
我对此主题的30分钟搜索只引导我发布此帖子并且:
http://lucene.472066.n3.nabble.com/How-to-get-the-score-in-the-result-td493812.html
http://lucene.472066.n3.nabble.com/Scoring-using-POJO-SolrJ-td3235016.html
在第二个建议从分数中删除
@Field
注释,但它不起作用 . 在这两个地方都没有提出有效的解决方案 .所以我想出了在"raw"结果上循环的解决方案,将它们绑定为
getBeans
,并添加得分: