В Lucene я могу искать один индекс, но использовать IDF из другого? - PullRequest
1 голос
/ 10 марта 2011

Я строю систему, в которой я хочу показывать только результаты, проиндексированные за последние несколько дней. Более того, я не хочу вести гигантский индекс с миллионами документов, если я хочу только вернуть результаты за пару дней (тысячи документов).

С другой стороны, моя система полагается, что вхождения терминов в документах, хранящихся в индексе, имеют реалистичное распределение (следовательно: реалистичный IDF).

Тем не менее, я хотел бы использовать небольшой индекс для возврата результатов, но я хочу вычислить оценку документов, используя IDF из гораздо большего индекса (или даже из внешнего источника).

Подобное API, похоже, не позволяет мне это делать. Метод idf не получает в качестве параметра используемый термин.

Другая возможность - использовать TrieRangeQuery, чтобы убедиться, что показанные документы находятся в течение последних нескольких дней. Опять же, я скорее не поддерживаю больший индекс. Также этот вид запроса не из дешевых.

1 Ответ

2 голосов
/ 11 марта 2011

Вы должны иметь возможность расширять IndexReader и переопределять методы docFreq () для предоставления любых значений, которые вы хотите.Единственное, что может сделать эта реализация, - это открыть два экземпляра IndexReader - один для малого индекса и один для большого индекса.Все методы делегируются маленькому IndexReader, кроме docFreq (), который делегируется большому индексу.Вам нужно будет масштабировать возвращаемое значение, т.е.

int myNewDocFreq = bigIndexReader.docFreq(t) / bigIndexReader.maxDoc() * smallIndexReader.maxDoc()
...