Какова рекомендуемая стратегия для замены запросов к функциям ord () и rord () в Solr? - PullRequest
3 голосов
/ 29 апреля 2011

Я использую функцию rord() в запросах Solr, чтобы повысить результаты запроса по отношению к полю "rank", используя синтаксис, подобный следующему:

bf=rord(cur_rank)^1.8

Алгоритм работает хорошо, нопоследние изменения в Solr указывают на то, что использование ord () и rord () теперь является проблемой памяти.Начиная с журнал изменений :

Поиск и сортировка теперь выполняются для каждого сегмента, что означает, что записи FieldCache, используемые для сортировки и для запросов функций, создаются и используются длясегмент и может быть повторно использован для сегментов, которые не меняются между обновлениями индекса.Хотя в целом это выгодно, это может привести к увеличению использования памяти более чем в 1,3 в определенных сценариях:

[...]

2) Для некоторых запросов функций, таких как ord () и rord (), требуетсяэкземпляр FieldCache верхнего уровня и, таким образом, может привести к увеличению использования памяти.Попробуйте заменить ord () и rord () альтернативами, такими как запросы функций, основанные на ms () для повышения даты.

В нем упоминаются возможные стратегии обработки повышения на основе даты, но как насчетчисло типа «ранг», где ранг - это число от 1 до общее количество записей ?

rord () кажется идеальным ... какие-либо другие стратегии?

1 Ответ

2 голосов
/ 31 августа 2011

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

Это невозможно с ord и rord, которые дают вам порядковый номер для всего индекса вместо значения для одного документа.

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

Вот так теперь работает повышение даты: раньше использовалось поле поля даты для вычисления увеличения, тогда как теперь используется число миллисекунд между значением даты.поле и сейчас.См. http://wiki.apache.org/solr/SolrRelevancyFAQ («Как повысить оценку новых документов») для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...