Сортировка результатов поиска Lucene по индивидуальному заказу (уникальна для каждого пользователя)
В моем приложении есть аутентифицированные пользователи, которые имеют доступ к общей базе данных до 500 000 элементов. Каждый из пользователей имеет свой собственный общедоступный веб-сайт и нуждается в способности расставлять приоритеты элементов, отображаемых (думаю, upvote) на своем собственном сайте.
из 500 000 предметов они могут иметь только до 200 предметов с приоритетом, порядок остальных предметов имеет меньшее значение.
Каждый из пользователей будет расставлять приоритеты по-разному.
Сначала я задавал подобный вопрос MySQL здесь. Результаты Mysql, отсортированные по списку, который уникален для каждого пользователя и получили хороший ответ, но я считаю, что лучшим вариантом может быть выбор решения без индекса SQL.
Можно ли это сделать в Lucene? Есть ли другая технология поиска, которая была бы лучше для этого.
пс. Google реализует аналогичную настройку типа в своих результатах поиска, где вы можете устанавливать приоритеты и исключать свои собственные результаты поиска, если вы вошли в систему.
Обновление: повторно помеченный sphinx, так как я читал документацию, и я верю, что он может делать то, что я ищу, с "значениями атрибутов для каждого документа", хранящимися в памяти - интересно услышать любые отзывы об этом от гуру sphinx
1 ответ
Вы определенно захотите сохранить идентификатор элемента в каждом объекте документа при создании индекса. Есть несколько способов сделать следующий шаг, но самым простым будет взять приоритетные элементы и добавить их в поисковый запрос, что-то вроде этого для каждого специального элемента:
"OR item_id=%d+X"
где X - это уровень усиления, который вы хотели бы использовать. Вам, вероятно, нужно будет эмпирически настроить это число, чтобы убедиться, что его просто "подняли на голосование", и оно не окажется в верхней части списка в поисках чего-то совершенно не связанного.
Выполнение этого таким образом, по крайней мере, предотвратит вас от многих раздражающих шагов постобработки, которые потребуют от вас перебора всего набора результатов - надеюсь, правильная сортировка будет прямо из запроса индекса.