how do I normalise a solr/lucene score?

前端 未结 3 1614
自闭症患者
自闭症患者 2020-12-01 06:51

I am trying to work out how to improve the scoring of solr search results. My application needs to take the score from the solr results and display a number of “stars” depe

相关标签:
3条回答
  • 2020-12-01 07:25

    It's called normalized score (Scores As Percentages).

    You can use the following the following parameters to achieve that:

    ns = {!func}product(scale(product(query({!type=edismax v=$q}),1),0,1),100)
    fq = {!frange l=20}$ns
    

    Where 20 is your 20% threshold.

    See also:

    Remove results below a certain score threshold in Solr/Lucene?

    http://article.gmane.org/gmane.comp.jakarta.lucene.user/12076 http://article.gmane.org/gmane.comp.jakarta.lucene.user/10810

    0 讨论(0)
  • 2020-12-01 07:25

    I've never had to do anything this complicated in Solr, so there may be a way to hook this in as a plugin - but you could handle it in the client when a result set is returned. If you've sorted by relevance this should be staightforward - get the relevence of the first result (max), and the last (min). Then for each result with relevance x, you can calculate

    normalisedValue = (x - min) / (max - min)
    

    which will give you a value between 0 and 1. Multiply by 5 and round to get the number of stars.

    0 讨论(0)
  • 2020-12-01 07:40

    To quote http://wiki.apache.org/lucene-java/ScoresAsPercentages:

    People frequently want to compute a "Percentage" from Lucene scores to determine what is a "100% perfect" match vs a "50%" match. This is also somethings called a "normalized score"

    Don't do this.

    Seriously. Stop trying to think about your problem this way, it's not going to end well.

    That page does give an example of how you could in theory do this, but it's very hard.

    0 讨论(0)
提交回复
热议问题