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