Apache Lucene: всегда ли показатель релевантности находится между 0 и 1? - PullRequest
1 голос
/ 10 января 2011

Привет,

У меня есть следующий фрагмент Apache Lucene, который дает мне хорошие результаты:

int numHits=100;
        int resultsPerPage=100;
        IndexSearcher searcher=new IndexSearcher(reader);
        TopScoreDocCollector collector=TopScoreDocCollector.create(numHits,true);
        Query q=parser.parse(queryString);
        searcher.search(q,collector);
        ScoreDoc[] hits=collector.topDocs(0*resultsPerPage,resultsPerPage).scoreDocs;

        Results r=new Results();
        r.length=hits.length;
        for(int i=0;i<hits.length;i++){
            Document doc=searcher.doc(hits[i].doc);
            double distanceKm=getGreatCircleDistance(lucene2double(doc.get("lat")), lucene2double(doc.get("lng")), Double.parseDouble(userLat), Double.parseDouble(userLng));
            double newRelevance=((1/distanceKm)*Math.log(hits[i].score)/Math.log(2))*(0-1);
            System.out.println(hits[i].doc+"\t"+hits[i].score+"\t"+doc.get("content")+"\t"+"Km="+distanceKm+"\trlvnc="+String.valueOf(newRelevance));
        } 

Что я хочу знать, так это хиты [i].и 1?Кажется, так, но я не уверен.Я даже проверил документацию Lucene (класс ScoreDocs) безрезультатно.Вы увидите, что я вычисляю журнал значения "newRelevance", основанного на совпадениях [i] .score.Мне нужно, чтобы значение [i] .score было в диапазоне от 0 до 1, потому что, если оно меньше нуля, я получу ошибку;выше 1, и знак изменится с отрицательного на положительный.

Я надеюсь, что какой-нибудь специалист по Lucene сможет предложить мне некоторое понимание.

Большое спасибо,

Ответы [ 3 ]

4 голосов
/ 10 января 2011

Да, оценка всегда будет в диапазоне от 0 до 1.

Когда Lucene вычисляет оценку, она находит индивидуальные оценки для попаданий по терминам в полях и т. Д. ... и суммирует их,Если общее попадание с наивысшим рейтингом превышает 1, все баллы документа нормализуются, чтобы составить от 0 до 1, а документ с наивысшим рейтингом имеет балл 1. Если, однако, ни один документ не был больше 1, нормализация не происходити результаты возвращаются как есть.Вот почему иногда верхний документ имеет балл 1, а в других случаях балл ниже 1.


РЕДАКТИРОВАТЬ: Проведя немного больше исследований, ответ скорее всего нет .В версии Lucene, с которой я знаком (v2.3.2), поиски проходят через объект Hits, чей метод GetMoreDocs() нормализует оценки, если какой-либо из них больше 1. В более поздних версиях кажется, что этодело не в том, что класс Hits больше не используется.Будут ли ваши оценки между 0 и 1, будет зависеть от того, какую версию Lucene вы используете, и какой механизм используется для поиска.

Цитировать из списка рассылки Lucene :

Счет - произвольное число> 0. Он ни к чему не нормализован, его следует использовать только длянапример, сортировать результаты

1 голос
/ 10 января 2011

Я считаю, что баллы Lucene всегда нормализуются, то есть самые высокие баллы получают 1 (или близко к нему). Значения должны всегда быть между 0 и 1. По сути, это означает, что оценки не имеют объективного значения, то есть их нельзя сравнивать с чем-либо, кроме других совпадений из того же набора результатов.

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

0 голосов
/ 10 января 2011

Баллы находятся в диапазоне от 1 до 0, но максимальный балл не обязательно должен быть 1. Оценки всегда связаны друг с другом, и прямое сравнение не следует проводить между оценками двух разных запросов.

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