Подтвердить что ты не робот

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

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

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

Спасибо заранее!

4b9b3361

Ответ 1

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

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;
    }
}

Ответ 2

Он назвал нормализованный балл (Оценка как проценты).

Для этого вы можете использовать следующие параметры:

ns = {!func}product(scale(product(query({!type=edismax v=$q}),1),0,1),100)
fq = {!frange l=20}$ns

Где 20 - ваш 20% -ый порог.

Связано: как мне нормализовать оценку solr/lucene?


Я бы не рекомендовал это делать, потому что абсолютные оценки в Lucene не имеют смысла (например, оценки не сопоставляются напрямую поиск). Соотношение балла и наивысшего результата но абсолютная калибровка для наивысшего балла вернулись, по крайней мере, в настоящее время, поэтому нет способа определить из результаты оценки качества результата. Есть различные подходы к улучшению этого, которые обсуждались ( более сопоставимые оценки, кодируя дополнительную информацию в счет и использование этого для нормализации или, вероятно, лучше, обобщение оценки на объект, содержащий несколько частей Информация; например общее количество условий запроса, соответствующих верхнему результат, если вы используете значение по умолчанию ИЛИ, было бы весьма полезно). Ни один из эти идеи реализованы, насколько я знаю. - @Chuck

Источник: RE: Предельные хиты с порогом оценки

Связанный: Re: Вопрос о функции подсчета очков в Lucene

Ответ 3

Просто обновление для всех, кто спотыкается здесь - EarlyTerminatingSortCollector был предоставлен Lucene, и пользовательский сборщик не нужно делать для это больше. Оберните его над TopDocsCollector (в конкретном случае OP, TopScoreDocCollector) для достижения заданной задачи.

EarlyTerminatingSortCollector

A Collector, который рано завершает сбор документов на основе каждого сегмента, если сегмент был отсортирован в соответствии с данным Sort.

TopDocsCollector

Базовый класс для всех коллекционеров, которые возвращают вывод TopDocs. Этот сборщик позволяет легко расширять, предоставляя один конструктор, который принимает PriorityQueue, а также защищенные члены для этой очереди приоритетов и счетчик числа итогов.