РЕДАКТИРОВАТЬ: IIUC, у вас есть формула сходства для каждого поля, и вы хотите использовать ее для каждого документа, работая со всеми другими документами.Вы можете использовать несколько опций, все во время индексации:
- Расширить класс DefaultSdentifity .
- Расширить класс SimilarityDelegator , если вынеобходимо изменить только часть методов.
В обоих методах вы можете использовать полезных нагрузок для хранения информации, относящейся к конкретному сроку (может быть полезно для данных длиной в лат).
После реализации класса Similarity с использованием одного из этих методов, используйте Similarity.setDefault (mySimility), чтобы установить его в качестве экземпляра Similarity для индексации и поиска.
Только после этого индексируйте ваш текстовый корпус, которыйвы можете искать позже - вам, вероятно, придется расширить класс Searcher, чтобы получить общее сходство.
Сказав это, я считаю, что этот подход не подходит для вашего варианта использования - Lucene оптимизирован, чтобы получить несколькоаналогичные документы, а не оценка для каждого, поэтому я предсказываю, что время выполнения будет непомерно высоким - надеюсь, я ошибаюсь, но, тем не менее, предлагаю вам прочитать Mining of Massive Datasets для лучшего подхода - минимальные хэши и shingling.
Удачи.
Патрик, я сначала процитирую Гранта Ингерсолла об изменении класса подобия: "Here be Dragons" .Настроить класс сходства Lucene сложно.Я сделал это.Это не весело.Делайте это только если вам абсолютно необходимо.
Я предлагаю вам сначала прочитать документ о пространственном поиске Гранта , его документ о поиске и его документ об отладочной релевантности .Здесь показаны другие способы получения попаданий по мере необходимости.