2012-03-29 5 views
2

Lucene에는 항상 일정한 점수가 있었기 때문에 Lucene과 관련하여 몇 가지 문제가 있었으며 부스트 값을 무시했습니다.Lucene - 조항 수에 대한 채점 효과

파서 rewriteMethod를 SCORING_BOOLEAN_QUERY_REWRITE로 설정하면 트릭을 만들었지 만 'clauseCount'에 이상한 부작용이 있습니다.

계속 점수를 매길 경우 기본적으로 maxClauseCount에 문제가 없습니다. 기본값은 1024입니다. 동적 점수를 사용하면 clauseCount가 1024를 빠르게 초과했습니다. 왜 그런지 궁금합니다.

누구든지이 기술 세부 사항을 알고 있습니까?

'ca *'와 같은 검색어는 'car or cars'로 다시 작성됩니다. 그러나 당신이 상수 또는 동적 점수를 사용하더라도 항상 그렇습니다.

미리 감사드립니다.

편집 : 그래서 여기 내 해결책이 있습니다. 문서를 만들 때 설정 한 값을 높이는 문서가 나중에 1.0이 되었기 때문에 몇 가지 문제가 발생했습니다. 어쩌면 버그, 나는 이것에 대해 잘 모르겠다. 내가 아는 것은 searcher에서 문서를 가져올 때 문서 개체가 새로 만들어지고 부스트 값이 설정되지 않는다는 것입니다. 그냥 들판. C# 포트와 관련 될 수 있습니다. 어쨌든 원래 쿼리를 사용하고 Doc 필드에 설정 한 초기 부스트 값과 점수를 곱하는 CustomScoreQuery를 작성했습니다. (불쾌한 해결 방법은 알고 있습니다.)

충분한 코드가 있습니다. 나는 개선의 여지가 있습니다. 특히 검색 자나 현장이 필요없이 원래의 부스트 값을 얻을 수있는 곳.

public class DynamicBoostingQuery : CustomScoreQuery 
{ 
    private Searcher s; 

    public DynamicBoostingQuery(Query q, Searcher searcher) 
     : base(q) 
    { 
     this.s = searcher; 
    } 

    public override float CustomScore(int doc, float subQueryScore, float valSrcScore) 
    { 
     float val = base.CustomScore(doc, subQueryScore, valSrcScore); 

     try 
     { 
      Document d = s.Doc(doc); 

      float priority = float.Parse(d.Get("raw_categoryPriority")); 

      return val * priority; 
     } 
     catch 
     { 
      return val; 
     }   
    } 
} 
+0

[doc on getBoost] (http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/api/all/org/apache/lucene/document/Document.html#getBoost())를 읽어주세요. Lucene은 언제나 훌륭한 아이디어입니다. 전반적으로 훌륭한 Javadocs입니다.) 문서 부스트는 검색시 사용할 수있는 것이 아니며 각 개별 필드의 효과적인 부스트로 배가됩니다. 어쩌면 그것은 당신에게 열려있는 길일 것입니다 - Fieldable.getBoost를 사용하십시오. –

+0

나는했다. "검색 할 때 검색된 문서의 경우이 메서드는 항상 1을 반환합니다." 불행히도 그것은 내 솔루션을 변경하지 않습니다. 오 잘, 그렇게 나쁘지 않습니다. :) – Enzi

답변

1

MultiTermQuery의 기본 (자바 루씬 3.5이 도입 된 정확한 버전을 모르는)만을 조항과 히트 정의 된 임계 값까지 그리고 그 CONSTANT_SCORE_FILTER_REWRITE로 전환을 넘어 CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE를 사용 CONSTANT_SCORE_AUTO_REWRITE_DEFAULT입니다 TooManyClauses를 제기하지 않습니다. 그것을 오버라이드하여 Lucene이 BooleanQuery 재 작성을 사용하도록했습니다. 안타깝게도 점수가 필요한 경우 필터 기반 다시 쓰기를 사용하는 옵션이 없습니다.

어쩌면 CustomScoreQuery를 사용하여 문서 향상을 시도해 볼 수 있습니다.

+0

고맙습니다. 현재 SCORING_BOOLEAN_QUERY_REWRITE의 검색 품질은 아무 것도 향상되지 않아도 CONSTANT_SCORE_AUTO_REWRITE_DEFAULT에 비해 매우 나쁩니다. 이 문제를 피하기 위해 CustomScoreQuery를 시도해 보겠습니다. – Enzi