ограничить количество расширенных документов - PullRequest
1 голос
/ 25 марта 2020

У нас есть некоторые случаи использования, когда нам нужно небольшое количество расширенных документов в начале, но весь результат не должен сортироваться по запросу повышения.

Примеры:

  • добавить некоторые платные результаты вперед, но это должно быть ограничено, в противном случае, если их много, пользователи видят только рекламу, а не реальные результаты.
  • продвигают некоторых пользователей (например, в приложении для знакомств, показывают некоторые премиум-пользователи сверху)
  • показывают симпатичного пользователя сверху (например, в виде карты, сверху колоды, должен быть хороший пользователь)

На данный момент мы делаем это с двумя разными запросами и объединяет результаты (сначала x пользователей из списка довольно / премиум / продвинутый, а затем остальные), но это делает пейджинг очень сложным и глючным, потому что у нас есть 2 разных курсора.

Поэтому я ищу решение по ограничению расширенных документов.

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Большое спасибо, поэтому я сначала пытаюсь найти документы с повышенными правами и добавить их в elevateIds, потому что запрос слишком сложен для определения в xml.

0 голосов
/ 29 марта 2020

Вам необходимо использовать Компонент повышения уровня запроса

Компонент повышения уровня запроса позволяет настраивать максимальные результаты для данного запроса независимо от обычной оценки Lucene.

Вы можете добавить QueryElevationComponent к любому обработчику запросов в файле solrconfig. xml. Сначала определите компонент:

<searchComponent name="elevator" class="solr.QueryElevationComponent" >
  <!-- pick a fieldType to analyze queries -->
  <str name="queryFieldType">string</str>
  <str name="config-file">elevate.xml</str>
</searchComponent>

компонент может

  • включать аргумент config-file - в этом случае повышенные результаты запроса настраиваются в связанном внешнем файле XML (как в примере выше, см. elevate.xml).
  • в противном случае результаты повышенного запроса должны быть переданы во время запроса, используя elevateIds & excludeIds параметры.

Затем добавьте компонент в определение вашего обработчика запроса:

<requestHandler name="<yourRequestHandler>" class="solr.SearchHandler">
  <!-- your base configuration -->
  <!-- ....................... -->
  <arr name="last-components">
    <str>elevator</str>
  </arr>
</requestHandler>
...