Отдельно ответить на ваши вопросы.
Нужно ли составлять индексы для песен каждого пользователя независимо?
Нет;Обычная техника для такого рода ситуаций состоит в том, чтобы индексировать каждый like
отдельно как с информацией о песне, так и дополнительно с идентификатором пользователя.Затем при поиске вы хотите отфильтровать результаты естественного текстового поиска пользователя по идентификатору пользователя, который фактически вошел в систему.
В Xapian вы сделаете это, добавив термин, представляющий пользователя (с подходящимпрефикс, так что вы можете иметь XU175
для пользователя с идентификатором 175, возможно), а затем использовать OP_FILTER
, чтобы ограничить поиск только лайками вошедшего в систему пользователя.
Нужно ли создаватьиндексировать постепенно каждый короткий промежуток времени [для поддержки индексации в реальном времени]?
Это полностью зависит от используемой вами поисковой системы.С Xapian вы можете сделать это и периодически «сжимать» базы данных, сгенерированные в одну базовую;или вы можете индексировать вживую в базу данных - хотя, поскольку Xapian работает с одним автором, вы захотите найти способ сериализации этого, например, путем добавления новых лайков в очередь и наличия одного процесса, который их извлекает и индексируетв базу данных.Одно из основных решений этой проблемы - использовать Restpose , написанный одним из разработчиков Xapian, который выполняет ту же роль, что и Solr для .Lucene .
Вы также можете стать более привлекательным, проиндексировав одну базу данных, затем реплицировав ее в другую и выполнив поиск в реплицированной версии, что также позволит вам в будущем масштабировать по горизонтали.В документации Xapian обсуждается репликация .