2013-07-03 55 views
2

我爲solr做了一個非常簡單的自定義相似性類。它主要用於測試。如何從我的自定義相似度實現中訪問schema.xml中的值

public class StaticNormSimilarity extends DefaultSimilarity { 

    private static final Logger LOG = LoggerFactory.getLogger(StaticNormSimilarity.class); 
    private float norm = 0.1f; 

    public void setNorm(float norm) { 
    this.norm = norm; 

    //TODO: not working how can I access parameters 
    LOG.info("##gyk: StaticNormSimilarity norm = {}", norm); 
    System.out.println(String.format("##gyk: StaticNormSimilarity: %f",norm)); 
    } 
    public float getNorm() { 
    return this.norm; 
    } 

    @Override 
    public float queryNorm(float sumOfSquaredWeights) { 
    return this.norm; 
    } 

} 

在schema.xml中我做了以下內容:

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> 
    <similarity class="gyk.solr.similarity.StaticNormSimilarity"> 
    **HOW CAN I SEE THIS VALUE FROM MY CODE** 
    <float name="norm">0.1</float> 
    </similarity> 
    <analyzer type="index"> 
    ... 
    </analyzer> 
    <analyzer type="query"> 
    ... 
    </analyzer> 
</fieldType> 

<similarity class="solr.SchemaSimilarityFactory" /> 

我的問題是如何從代碼中看到在schema.xml中指定的norm值文件?提前致謝。

回答

3

檢查DFRSimilarityFactory源代碼

對於schema進入

<fieldType name="text_dfr" class="solr.TextField"> 
    <analyzer class="org.apache.lucene.analysis.standard.StandardAnalyzer"/> 
    <similarity class="solr.DFRSimilarityFactory"> 
     <str name="basicModel">I(F)</str> 
     <str name="afterEffect">B</str> 
     <str name="normalization">H2</str> 
    </similarity> 
    </fieldType> 

初始化方法允許PARAMS從schema.xml中

@Override 
    public void init(SolrParams params) { 
    super.init(params); 
    discountOverlaps = params.getBool("discountOverlaps", true); 
    basicModel = parseBasicModel(params.get("basicModel")); 
    afterEffect = parseAfterEffect(params.get("afterEffect")); 
    normalization = parseNormalization(
     params.get("normalization"), params.get("c"), params.get("mu"), params.get("z")); 
    } 
+0

這是快速的retrival。非常感謝! –

相關問題