Я использую Spring Solr с Groovy.
Возникла проблема, когда я пытаюсь улучшить результаты.
Для пояснения рассмотрим упрощенный домен интернет-покупок, в котором индексируемым объектом является продукт.
У пользователя есть корзина покупок и список желаний, каждый из которых представляет собой простые списки кодов продуктов (например, List ‹String›). Сначала обрабатываются два списка, чтобы убедиться, что они уникальны и уникальны.
Простой поиск может быть по ключевому слову String в тексте продуктов (составное поле, созданное с использованием copyField, содержащее его описание и заголовок).
Требование состоит в том, чтобы в результатах перечислялся каждый продукт, в тексте которого ключевое слово соответствует любому из тех, которые отображаются в корзине покупок, затем любых продуктов, находящихся в списке желаний, а затем любых других.
Возникшая проблема заключается в том, что, хотя имеет место некоторое повышение и результаты каждого из wishList и shoppingBasket сгруппированы, совпадения shoppingBasket не всегда отображаются перед совпадениями wishList.
В зависимости от продуктов в каждом списке он иногда отображается в следующем порядке:
все совпадения в списке желаний, все совпадения в корзине покупок, все другие совпадения
вместо ожидаемого:
все совпадения в корзине покупок, все совпадения в WishList, все другие совпадения
Повышение применяется с использованием следующих критериев:
boostingCriteria = new Criteria('productCode_s').in(shoppingBasket).boost(2.0f)
boostingCriteria = boostingCriteria.or(
new Criteria('productCode_s').in(wishList).boost(1.0f) )
Увидев эту аналогичную проблему, я прокомментировал Сортировка, которая добавлялась в PageRequest, не имела никакого значения.
Я также использовал аннотацию @Score, чтобы включить оценку в возвращаемые результаты. Изучив их, я вижу, что solr дает одинаковый балл для всех совпадений либо в shoppingBasket, либо в wishList. Все матчи за пределами этих списков получают еще более низкий балл (идентичный между ними).
Пробовали разные значения для повышения (10000.0f и 5000.0f соответственно), но безрезультатно. Он действительно дал другой счет, но он по-прежнему был одинаковым во всех матчах в корзине покупок или списке желаний.
Даже если упростить поиск до только критериев повышения, упорядочение по-прежнему отсутствует.
Любые идеи были бы хорошы.