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;
}
}
}
[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를 사용하십시오. –
나는했다. "검색 할 때 검색된 문서의 경우이 메서드는 항상 1을 반환합니다." 불행히도 그것은 내 솔루션을 변경하지 않습니다. 오 잘, 그렇게 나쁘지 않습니다. :) – Enzi