У меня были некоторые проблемы с Lucene, так как он всегда имел постоянную оценку и игнорировал мои значения буста.
Установка парсера rewriteMethod на SCORING_BOOLEAN_QUERY_REWRITE сделала свое дело, но у него есть странный побочный эффект на 'clauseCount', который я не совсем понимаю.
С постоянным подсчетом у меня нет проблем с maxClauseCount, который по умолчанию равен 1024. При динамическом подсчете clauseCount быстро превысил 1024, и мне действительно интересно, почему это так.
Кто-нибудь знает технические детали этого?
В другом посте кто-то упомянул, что запросы типа 'ca *' переписаны на 'car OR cars'. Но разве это не должно быть всегда, независимо от того, используете ли вы постоянную или динамическую оценку?
Заранее спасибо!
редактировать:
Итак, вот мое решение. Я столкнулся с некоторыми проблемами, потому что значение повышения документа, которое я установил при создании документа, всегда было 1,0, когда я получил документ позже. Может быть, ошибка, я не уверен в этом. Что я знаю, так это то, что когда вы получаете документ от поисковика, объект документа создается заново, а значение повышения никогда не устанавливается. Просто поля. Может быть связано с портом C #.
Во всяком случае, я написал 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;
}
}
}