ITPub博客

首页 > 大数据 > 数据分析 > solr修改评分机制实现排序

solr修改评分机制实现排序

数据分析 作者:破棉袄 时间:2015-05-08 14:42:04 0 删除 编辑

solr要修改打分机制怎么改?
大多数回答:Similarity是个不错的方案.
但是具体怎么弄很少有明确的描述,官方wiki也只是说可以自定义,具体如何做,没有例子.

首先,solr4.0本身提供了多种评分方法:

org.apache.solr.search.similarities.BM25SimilarityFactory
org.apache.solr.search.similarities.DefaultSimilarityFactory
org.apache.solr.search.similarities.DFRSimilarityFactory
org.apache.solr.search.similarities.IBSimilarityFactory
org.apache.solr.search.similarities.LMDirichletSimilarityFactory
org.apache.solr.search.similarities.LMJelinekMercerSimilarityFactory
org.apache.solr.search.similarities.SchemaSimilarityFactory

每一个有什么不同不在今天讨论范围内,说下怎么配置.

schema.xml






bm25_test字段就会按照BM25SimilarityFactory机制评分.那么如何进一步自定义呢,不废话看代码:

package org.nlp.lucene.search.similarities;

 

import org.apache.lucene.search.similarities.Similarity;

import org.apache.solr.schema.SimilarityFactory;

 

public class NlpSimilarityFactory extends SimilarityFactory {

public Similarity getSimilarity() {

return new NlpSimilarity();

}

}

package org.nlp.lucene.search.similarities;

import org.apache.lucene.search.similarities.DefaultSimilarity;

public class NlpSimilarity extends DefaultSimilarity {
@Override  //idf值全部为1.0f
public float idf(long docFreq, long numDocs) {
return 1.0F;
}

@Override //tf值全部为1.0f
public float tf(float freq) {
return 1.0F;
}

@Override
public String toString() {
return “nlpSimilarity”;
}

}

SimilarityFactory照葫芦画瓢就是,NlpSimilarity可以重写哪些方法看一下DefaultSimilarity就好,当然BM25SimilarityFactory这些都是可以搞的,自己看着办吧,哥只能帮你到这里了.

什么,怎么确定评分的修改是否生效?

查询的时候加上参数debug=true就好.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29754888/viewspace-1629741/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: mysql监控脚本
请登录后发表评论 登录
全部评论

注册时间:2014-07-16

  • 博文量
    180
  • 访问量
    1158184