Удалить результаты ниже определенного порога счета в Solr/Lucene?

Существует ли встроенные технические возможности в solr/lucene для фильтрации результатов, если они падают ниже определенного порога счета? Скажем, если я обеспечу порог счета.2, затем все документы со счетом, то меньше чем.2 будут удалены из моих результатов. Моя интуиция - то, что это возможно путем обновления/настройки solr или lucene.

Вы могли указать на меня на правильное направление о том, как сделать это?

Заранее спасибо!

12
задан snickernet 20 May 2010 в 06:50
поделиться

1 ответ

Вы можете написать свой собственный Сборщик, который игнорировал бы сбор тех документов, которые секретарь помещает ниже вашего порога. Ниже приведен простой пример этого с использованием Lucene.Net 2.9.1.2 и C #. Вам нужно будет изменить пример, если вы хотите сохранить рассчитанную оценку.

using System;
using System.Collections.Generic;
using Lucene.Net.Index;
using Lucene.Net.Search;

public class ScoreLimitingCollector : Collector {
    private readonly Single _lowerInclusiveScore;
    private readonly List<Int32> _docIds = new List<Int32>();
    private Scorer _scorer;
    private Int32 _docBase;

    public IEnumerable<Int32> DocumentIds {
        get { return _docIds; }
    }

    public ScoreLimitingCollector(Single lowerInclusiveScore) {
        _lowerInclusiveScore = lowerInclusiveScore;
    }

    public override void SetScorer(Scorer scorer) {
        _scorer = scorer;
    }

    public override void Collect(Int32 doc) {
        var score = _scorer.Score();
        if (_lowerInclusiveScore <= score)
            _docIds.Add(_docBase + doc);
    }

    public override void SetNextReader(IndexReader reader, Int32 docBase) {
        _docBase = docBase;
    }

    public override bool AcceptsDocsOutOfOrder() {
        return true;
    }
}
8
ответ дан 2 December 2019 в 21:22
поделиться