Результаты поиска Lucene сортируются по списку настраиваемого порядка (уникальный для каждого пользователя)

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

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

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

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

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

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

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


person ADAM    schedule 28.08.2009    source источник


Ответы (1)


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

"OR item_id=%d+X"

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

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

person Robert Elwell    schedule 28.08.2009
comment
Хорошо, так что я предполагаю, что я сохраню приоритетный список в mysql или аналогичном и выберу этот список по user_id, упорядоченному по приоритету. с этим списком я бы затем сформировал строку поискового запроса lucene, как вы предложили. будет ли это по-прежнему масштабироваться и работать быстро, если в их приоритетном списке есть, скажем, 200 элементов - person ADAM; 29.08.2009