2012-12-11 3 views
3

필드 값에 따라 특정 문서를 향상 시키려고합니다. 일반적으로 잘 작동하지만 일부 문서는 더 작은 부스트 ​​값을 가지고 있지만 더 높은 점수를 반환합니다.Solr에서 쿼리 시간에 tf/idf를 무시합니다.

debugQuery=on 요청 매개 변수를 사용하여 쿼리를 디버깅 한 후 idf 함수가 특정 문서에 대해 높은 점수를 반환하여 전체 점수에 영향을주고 있음을 확인했습니다.

쿼리 시간에 tf/idf 점수를 무시할 수있는 방법이 있습니까?

답변

6

tf 및 idf 메서드를 재정의하는 Custom Similarity을 만들고 DefaultSimilarity 대신 사용하는 것이 좋습니다.

뭔가 같은 :

class CustomSimilarity extends DefaultSimilarity { 

    @Override 
    public float tf(float freq) { 
     return 1.0; 
    } 

    @Override 
    public float tf(int freq) { 
     return 1.0; 
    } 

    @Override 
    // Note the signature of this method may now take longs: 
    // public float idf(long docFreq, long numDocs) 
    public float idf(int docFreq, int numDocs) { 
     return 1.0; 
    } 
} 

세트는 당신의 schema.xml에서 그 유사성을 사용 : 답장을

<similarity class="myorg.mypackage.CustomSimilarity"/> 
+1

감사합니다, 나는 전환 할 수있는 플래그와 같은 간단한 뭔가를 기대했다 를 질의 할 때. 함수 쿼리가 솔루션 일지 궁금한가요? – C0deAttack

+0

[Field.setIndexOptions] (http://lucene.apache.org/core/3_6_0/api/all/org/)를 호출하여 필드에서 'tf'점수를 효과적으로 사용 중지 할 수 있다고 생각합니다. apache/lucene/document/AbstractField.html # setIndexOptions (org.apache.lucene.index.FieldInfo.IndexOptions)) ([FieldInfo.IndexOptions] (http://lucene.apache.org/core/4_0_0/core/org/) apache/lucene/index/FieldInfo.IndexOptions.html) .DOCS_ONLY). 그러면 lucene이 tf 값을 계산하는 데 필요한 TermFreqVectors를 저장하지 않아야합니다. idf를 사용하지 못하게하는 옵션은 없다고 생각합니다. – femtoRgon

+0

그래도 그래도, 이것은 유사성 클래스에 대한 것입니다. 채점 규칙을 정의합니다. tf 점수 매기기를 막기 위해 TermFreqVectors를 저장하지 못하게하는 것은 나에게 매우 해로운 것처럼 보입니다. – femtoRgon

관련 문제