2009-05-22 3 views
0

У меня есть приложение rails, в котором я пытаюсь выполнить полный поиск текста. Ферре, кажется, самый популярный выбор. Однако у меня есть проблема.Поиск подмодулей с Ferret

У меня есть «вещь», которая содержит идентификатор, который определяет, может ли пользователь увидеть его (и, следовательно, искать его), но я хочу искать подмодели этой «вещи», которые связаны с моей «вещью», но напрямую не содержат ссылок на пользователя.

Поэтому, как его реализовать? Есть ли разумный способ реализации этого, или мне нужно загрязнить мои модели ссылкой на идентификатор домена?

+0

Хорьки украдут что-нибудь блестящее. Обычно у них есть одно место в доме, где они скрывают все, поэтому вы можете посмотреть там, если вы используете их для поиска. ;) – Malfist

ответ

1

Я думаю, было бы очень неправильно предположить, что Ferret является самым популярным выбором для этого. Большинство людей, которых я знаю, бросили Ферре и заменили его Сфинксом. И люди, которые по какой-то причине не могут использовать Сфинкс, выбрали Xapian.

Тем не менее, ответ на ваш вопрос, вероятно, будет в значительной степени одинаковы, независимо от системы индексации вы выбираете:

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

Pagination может быть настоящей болью для такого рода вещей, потому что вы запрашиваете 10 элементов из своей поисковой системы, а затем ваш код разрешений отклоняет 5 из этих элементов, что означает, что вы должны продолжать выполнять поиск до тех пор, пока не получите свою первую десятку элементы для отображения. И теперь, когда вам нужна вторая страница, ну, тогда все становится настоящим беспорядком. Небеса запрещают им переходить прямо на страницу десять, потому что теперь вы не можете делать трюки, например, давать идентификатор начала, а не номер страницы. На самом деле, это не то, что вы хотите сделать вообще, если сможете это сделать.

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

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

Смежные вопросы