Использование функции опроса Apache Solr с Spring в Java

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

Мое исследование предполагает, что функция повышения Solr является решением для этого, но у меня есть некоторые проблемы, заставляющие это работать со Spring. Весь код работает нормально, и я получаю результаты поиска, как и ожидалось, но функция Boost, похоже, на самом деле не переупорядочивает мои поиски вообще. Например, я пытаюсь сделать что-то вроде этого:

Query query = new SimpleQuery();
Criteria searchCriteria = Criteria.where("title").contains("A").boost((float) 2);
Criteria extraCriteria = Criteria.where("title").contains("B").boost((float) 1);
query.addCriteria(searchCriteria.or(extraCriteria));

В этом примере я буду искать любой документ, заголовок которого содержит "A" или "B", но я хочу повысить результаты, которые соответствуют "A", в верхней части списка.

Я также пытался использовать расширенный синтаксический анализатор запросов DisMax с другим синтаксисом для достижения того же результата с аналогичным отсутствием успеха. Чтобы следовать тому же примеру шаблона, я пытаюсь использовать критерии выражения следующим образом:

Query query = new SimpleQuery();
Criteria searchCriteria = Criteria.where("title").expression("A^2.0 OR B^1.0");
query.setDefType("edismax");
query.addCriteria(searchCriteria);

Опять же, я ожидал бы, что это вернет документы с заголовками, соответствующими "A" или "B", но увеличит результаты, соответствующие "A", и опять же, похоже, что это вообще никак не влияет на порядок моих результатов.

1 ответ

Хорошо, я понял проблему здесь. В другом месте кода кто-то добавил этот фрагмент:

query.setPageRequest(pageable);

Это было сделано для поддержки разбиения на страницы результатов поиска, но объект с возможностью просмотра также содержал некоторые порядки сортировки, которые выглядели так, как будто они были добавлены в запрос как часть метода.setPageRequest. Что-то, на что стоит обратить внимание в будущем, это похоже на повышение переопределения сортировки при работе с запросами Spring Solr в этом сценарии.

Другие вопросы по тегам