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