В настоящее время мы работаем над проверкой концепции для клиента, использующего Solr, и смогли настроить все функции, которые им нужны, кроме скоринга.
Проблема в том, что им нужны оценки, которые заставляют результаты падать в несколько сегментов:
- Группа 1: точное соответствие по категории (оценка = 4)
- Блок 2: точное совпадение имени (оценка = 3)
- Блок 3: частичное совпадение по категории (оценка = 2)
- Блок 4: частичное совпадение имени (оценка = 1)
Первое, что мы сделали, - это разработали собственный класс подобия, который будет возвращать правильную оценку в зависимости от поля и точного или частичного совпадения.
Единственная проблема сейчас в том, что когда документ совпадает как по категории, так и по названию, оценки суммируются.
Пример: поиск по запросу "ресторан" возвращает документы в категории "ресторан", в названии которых также есть слово "ресторан", и, таким образом, они получают оценку 5 (4 + 1), но они должны получить только 4.
Я предполагаю, что для этого нам потребуется разработать собственный класс Scorer, но мы не знаем, как включить его в Solr. Другой вариант - создать настраиваемую реализацию SortField, аналогичную RandomSortField, уже присутствующей в Solr.
Может быть, есть даже более простое решение, о котором мы не знаем.
Все предложения приветствуются!