2015-10-12 3 views
0

Я застрял в довольно сложной проблеме. Я реализую функцию на своем веб-сайте, в которой человек получает все результаты, соответствующие определенным критериям. Критерии соответствия могут быть любыми. Однако, для простоты, назовем критерии соответствия «возраст». Это означает, что функция вернет все имена учеников из базы данных (которая находится в сотнях тысяч) со студентом, возраст которого соответствует «самому» с предоставленным параметром сверху.

Мои подходы:
1- У меня есть сервер Solr. Поскольку мне нужно реализовать это с разбивкой по страницам, мне нужно будет запросить Solr несколько раз (так как мой размер страницы solr равен 10), чтобы найти «почти абсолютное» соответствие студенту в режиме реального времени. Это очень интенсивно. Эта проблема сводится к эффективному извлечению этого большого количества кортежей из Solr.

2- Я попытался обработать его в партии (и увеличив размер страницы solr до 100). Полученные данные не гарантируются в режиме реального времени, когда кто-то использует мою функцию. Кроме того, чтобы сделать его оптимальным, мне нужно было бы изучить данные об альго, чтобы узнать, что все пользователи «наиболее вероятно» используют мою функцию сегодня. Затем я буду обрабатывать их по приоритету. Пожалуйста, помните, что число пользователей настолько велико, что я не могу запустить эту партию для «всех» пользователей каждый день.
С одной стороны, когда я хочу показывать результаты в режиме реального времени, мне приходится идти на компромисс в отношении производительности (несколько раз ударяя Solr, что немного неосуществимо), а с другой - мой результирующий набор не будет в режиме реального времени если я делаю пакетную обработку, плюс я не могу делать это каждый день, для всех пользователей.

Может кто-то исправить мои, казалось бы, ошибочные подходы?

Инвертирование Solr выполняется на основе содержимого MySQL db.Эффективное получение большого количества кортежей от Solr

+0

Вы действительно не говорите о [tag: batch-file], не так ли? пожалуйста, исправьте теги соответственно (возможно, вы имели в виду [тег: пакетная обработка], что-то совершенно другое?) ... спасибо! – aschipfl

+0

Ох. Да. Удалили. Благодарим за уведомление. –

ответ

0

Я думаю, что вам нужно будет с помощью Solr курсоры, которые позволят вам эффективно постраничным через большие ResultSets Solr cursors or deep paging

+0

Основная проблема заключается в том, что для получения «наилучших результатов» мне нужно будет запросить Solr для всех имеющихся данных. Это означает, что я бы ударил Solr в сотни раз, для каждого пользователя. Вычислительно, это очень интенсивно. –

1

Как я понимаю, ваши пользователи не заинтересованы в 100K результатов. Они хотят только получить результаты топ-10 (или топ-100 или аналогичные низкие числа), когда возраст человека ближе всего к количеству, которое вы поставляете.

Это звучит как случай для запросов функции Solr: https://cwiki.apache.org/confluence/display/solr/Function+Queries. Для примера возраста это было бы как-то вроде sort=abs(sub(37, age)) desc, score desc, которое вернет людей с возрастом, ближайшим к 37, первым и установит приоритет по счету в случае связей.

Смежные вопросы