Как реализовать поиск документов указанного пользователя? - PullRequest
1 голос
/ 09 марта 2012

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

У меня естьреализовал поисковые системы, используя xapian ранее, что предполагает периодическое создание индексов документов.

В моем случае, нужно ли мне создавать индексы для песен каждого пользователя независимо?

Если я хочу выполнить поискрезультаты будут больше real-time, значит ли это, что мне нужно строить индексы постепенно, каждый короткий промежуток времени?

1 Ответ

2 голосов
/ 10 марта 2012

Отдельно ответить на ваши вопросы.

Нужно ли составлять индексы для песен каждого пользователя независимо?

Нет;Обычная техника для такого рода ситуаций состоит в том, чтобы индексировать каждый like отдельно как с информацией о песне, так и дополнительно с идентификатором пользователя.Затем при поиске вы хотите отфильтровать результаты естественного текстового поиска пользователя по идентификатору пользователя, который фактически вошел в систему.

В Xapian вы сделаете это, добавив термин, представляющий пользователя (с подходящимпрефикс, так что вы можете иметь XU175 для пользователя с идентификатором 175, возможно), а затем использовать OP_FILTER, чтобы ограничить поиск только лайками вошедшего в систему пользователя.

Нужно ли создаватьиндексировать постепенно каждый короткий промежуток времени [для поддержки индексации в реальном времени]?

Это полностью зависит от используемой вами поисковой системы.С Xapian вы можете сделать это и периодически «сжимать» базы данных, сгенерированные в одну базовую;или вы можете индексировать вживую в базу данных - хотя, поскольку Xapian работает с одним автором, вы захотите найти способ сериализации этого, например, путем добавления новых лайков в очередь и наличия одного процесса, который их извлекает и индексируетв базу данных.Одно из основных решений этой проблемы - использовать Restpose , написанный одним из разработчиков Xapian, который выполняет ту же роль, что и Solr для .Lucene .

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

...