В настоящее время я работаю в социальной сети.
Моему начальнику недавно пришла в голову идея показывать результаты поиска случайным образом вместо обычных результатов (по дате регистрации). Проблема здесь проста и очевидна: если вы переходите с одной страницы на другую, она будет показывать вам разные результаты каждый раз, поскольку список каждый раз рандомизируется.
У меня возникла идея хранить результаты в базе данных + куки примерно так:
_id, creation_date)_results (search_id, order, user_id)Блок-схема будет выглядеть примерно так:
Здесь есть большой недостаток: производительность .... определенно возможно заставить систему ИЛИ выключиться ИЛИ очень медленно.
Есть идеи, что лучше всего это структурировать?






Что, если вместо случайного упорядочивания вы упорядочите какую-то функцию, в которой порядок известен и повторяем, просто неочевиден? Вы можете засеять такую функцию некоторыми данными из поискового запроса, чтобы было еще менее очевидно, что она повторяется. Таким образом, вы можете пролистывать результаты вперед и назад и всегда получать то, что ожидаете. Музыкальные плееры используют эту функцию для своей функции перемешивания (так что, если вы нажмете назад, вы получите предыдущую песню, а если вы снова нажмете следующую, вы вернетесь с того места, где начали). Я уверен, что вы можете предугадать какую-то функцию для выполнения этого ... Значения идентификатора побитовое исключающее ИЛИ с некоторой константой (из запроса), а затем сортировки по полученному числу может быть достаточно. Я выбрал XOR произвольно, потому что это тривиально простая функция, которая даст вам повторяемые и неочевидные результаты.
Может быть, хм, но разве оператор xor не говорит только, если это исключающее ИЛИ? Я имею в виду, что, насколько мне известно, здесь нет математических операций.
Приношу свои извинения за путаницу. XOR - это как логический, так и побитовый оператор. Я обновил свой ответ ссылкой на объяснение. Кроме того, в StackOverflow не одобряется публикация ответа в качестве ответа на другой ответ. Вместо этого вам следует обновить вопрос или прокомментировать ответ.
Извините, я знаю, что это не помогает, но я не понимаю, зачем вашему боссу это нужно?
Я знаю, что если я ищу человека в социальной сети, я хочу, чтобы результаты были упорядочены только по релевантности и релевантности. Я думаю, что рандомизированные результаты просто расстроят пользователя, но, возможно, это только я.
Например, если я ищу «Джон Смит», то первой первой партией результатов лучше быть людей по имени «Джон Смит». Затем покажите мне похожие имена ближе к концу результатов. Я не хочу искать «Джон Смит» и получать «Джон Смитерс» в качестве второго результата.
Ну, я с Мэттом спрашиваю "Почему?"
Думаю, у rmeador тоже есть хорошее предложение. Вы можете случайным образом отсортировать по другому полю или какому-то алгоритму. Просто из перестановок DESC / ASC в поле последнего обновления или в каком-либо другом поле результата.
Другой вариант - выполнить первоначальный поиск в первый раз и вернуть только связанные идентификаторы, а затем сохранить полную строку идентификатора в базе данных, и каждая последующая страница затем будет выполнять поиск по этим идентификаторам.
Мои два цента.
Я вижу сценарий, в котором случайный набор результатов полезен, но не для поиска, а для просмотра профилей, артистов или местных событий. Он предлагает больше возможностей для тех, кто не будет отображаться в традиционном поиске.
Хм, это могло бы помочь. Мне нужно будет проверить, как MySQL отреагирует на это. (Спасибо за отзыв. Я в основном привык к непоточным форумам.