Solr实现自定义评分功能

时间:2016-08-04 15:36:43

标签: solr

我正在尝试使用Solr实现我自己的自定义评分功能 - 我希望Solr做一个KNearestNeighbor并返回得分最高的最接近的结果。

我一直在关注这两个实现external-score-to-solrusing-custom-score-query

我有多远

在我的架构上,我有以下字段:

<field name="histogram" type="payloads" indexed="true" stored="true" />

具有直方图字段数据的文档示例如下:

"bin1|1.23 bin2|-0.24 bin3|-1.89 bin4|5.21"

按照上面的两个链接,我最终扩展了 CustomScoreProvider 类,我的 customScore 功能是:

@Override
public float customScore(int doc, float subQueryScore, float valSrcScores[]) throws IOException {

    Document d = context.reader().document(doc);
    String histogram = d.get("histogram");

    // Here I have a function that splits the string by space and then parse
    // each name and value
    Map<<String, Float> histogramMap = getDocumentHistogram(histogram);

    // A similar function but for the query terms. Can be done only once
    // query is the type of org.apache.lucene.search.Query
    Map<<String, Float> queryMap = getQueryHistogram(query.toString());

    // Trivial function to compute KNN
    float score = computeScore(histogramMap, queryMap);

    return 1/score;
}

问题

我所做的工作,但正如您在实现中看到的那样,性能不佳,因为对于每个查询,我需要在计算分数之前解析这些功能。我只能解析查询术语一次,但我仍然需要解析每个文档的直方图才能计算得分。

那么,有没有办法获得 customScore 函数中已解析的直方图功能的列表/数组/地图/等?此字段类型为有效负载,它使用带有管道 WhitespaceTokenizerFactory 标记生成器作为分隔符,因此应该有一种方法可以返回每个人的solr术语

我可以提供更多有关我所做的事情的细节,而且我正在使用Solr 6.0.1。

谢谢, 塞尔吉奥

1 个答案:

答案 0 :(得分:0)

分析直方图时,将为文档建立索引并将其添加到索引中。 这样您就可以在排名过程中使用索引字段。