经常有朋友在群里问,Solr 要修改打分机制怎么改?
大多数回答:Similarity 是个不错的方案。但是具体怎么弄很少有明确的描述,官方 wiki 也只是说可以自定义,具体如何做,没有例子。
Solr 4.0 内置的评分方法
首先,Solr 4.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 中配置:
1 | <field name="bm25_test" type="text_bm25" indexed="true" stored="true" required="false" multiValued="true"/> |
bm25_test 字段就会按照 BM25SimilarityFactory 机制评分。
自定义评分
那么如何进一步自定义呢,不废话看代码:
1 | package org.nlp.lucene.search.similarities; |
1 | package org.nlp.lucene.search.similarities; |
SimilarityFactory 照葫芦画瓢就是,NlpSimilarity 可以重写哪些方法看一下 DefaultSimilarity 就好,当然 BM25SimilarityFactory 这些都是可以搞的,自己看着办吧,哥只能帮你到这里了。
如何验证评分修改
什么,怎么确定评分的修改是否生效?
查询的时候加上参数 debug=true
就好。