Сортировка результатов Lucene по индивидуальному заказу (уникальна для каждого пользователя) - PullRequest
3 голосов
/ 29 августа 2009

В моем приложении есть аутентифицированные пользователи, которые имеют доступ к общей базе данных до 500 000 элементов. Каждый из пользователей имеет свой собственный общедоступный веб-сайт и нуждается в способности расставлять приоритеты для элементов, отображаемых (думаю, upvote) на своем собственном сайте.

из 500 000 предметов, в которых они могут иметь только до 200 предметов с приоритетами, порядок остальных предметов имеет меньшее значение.

Каждый из пользователей будет определять приоритеты элементов по-разному.

Первоначально я задавал подобный вопрос mysql здесь Результаты Mysql, отсортированные по списку, который уникален для каждого пользователя , и получили хороший ответ, но я считаю, что лучшим вариантом может быть выбор решения без индекса SQL.

Можно ли это сделать в Lucene? Есть ли другая технология поиска, которая была бы лучше для этого.

пс. Google реализует аналогичную настройку типа в своих результатах поиска, где вы можете расставлять приоритеты и исключать свои собственные результаты поиска, если вы вошли в систему.

Обновление: повторно пометил sphinx, так как я читал документацию, и я верю, что он может делать то, что я ищу, с "значениями атрибутов для каждого документа", хранящимися в памяти - интересно услышать любые отзывы по этому поводу от гуру сфинкса

1 Ответ

2 голосов
/ 29 августа 2009

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

"OR item_id=%d+X"

где X - это уровень усиления, который вы хотели бы использовать. Вероятно, вам нужно будет эмпирически настроить это число, чтобы убедиться, что его просто "подняли на голосование", и оно не окажется в верхней части списка в поисках чего-то совершенно не связанного.

Выполнение этого таким образом, по крайней мере, предотвратит множество раздражающих шагов постобработки, которые потребуют от вас итерации по всему набору результатов - надеюсь, правильная сортировка будет прямо при запросе индекса.

...