Удалить результаты ниже определенного порогового значения в Solr / Lucene? - PullRequest
12 голосов
/ 20 мая 2010

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

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

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

Ответы [ 3 ]

8 голосов
/ 20 мая 2010

Вы можете написать свой собственный коллектор, который будет игнорировать сбор тех документов, которые оценщик размещает ниже вашего порога. Ниже приведен простой пример использования 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;
    }
}
5 голосов
/ 02 апреля 2013

Это называется нормализованным счетом ( Число баллов в процентах ).

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

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

0 голосов
/ 13 февраля 2017

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

EarlyTerminatingSortCollector

Сборщик, который досрочно прекращает сбор документов для каждого сегмента, если сегмент был отсортирован в соответствии с заданной сортировкой.

TopDocsCollector

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...