Как набрать небольшой набор документов в Lucene - PullRequest
0 голосов
/ 13 марта 2011

Я хотел бы вычислить оценки для небольшого количества документов (а не для всей коллекции) для данного запроса. Моя попытка, как показано ниже, возвращает 0 баллов за каждый документ, хотя запросы, с которыми я тестирую, были получены из терминов в документах, которые я пытаюсь оценить. Я использую Lucene 3.0.3.

List<Float> score(IndexReader reader, Query query, List<Integer> newDocs ) {
List<Float> scores = new List<Float>();
IndexSearcher searcher = reader.getSearcher();
Collector collector = TopScoreDocCollector.create(newDocs.size(), true);
Weight weight = query.createWeight(searcher);
Scorer scorer = weight.scorer(reader, true, true);
collector.setScorer(scorer);
float score = 0.0f;
for(Integer d: newDocs) {
    scorer.advance(d);
    collector.collect(d);
    score = scorer.score();
    System.out.println( "doc: " + d + "; score=" + score);
    scores.add( new Float(score) );
}
return scores;
}

Я явно что-то упускаю при настройке скоринга, но из исходного кода Lucene не могу понять, что это может быть.

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

Gene

1 Ответ

0 голосов
/ 14 марта 2011

Используйте фильтр и выполните поиск с этим фильтром . Затем просто переберите результаты, как при обычном поиске - Lucene будет обрабатывать фильтрацию.

В общем, если вы смотрите на DocIds, вы, вероятно, используете API более низкого уровня, чем вам нужно, и это доставит вам неприятности.

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