Я собираюсь опубликовать ответ на свой вопрос.
Так что довольно просто искать места.Стандарт Venue.tire.search {...}
Проблема заключается в том, как отфильтровать пользователя по следующим местам.Вместо того, чтобы использовать модель Venue для поиска, я решил проиндексировать закладки.
Это моя модель закладок
class Bookmark < ActiveRecord::Base
belongs_to :bookmarkable, :polymorphic => true
def to_indexed_json
{
:title => bookmarkable.display_name,
:user_id => user_id
}.to_json
end
end
После этого у меня есть user_id и название места в индексе.Теперь поиск становится таким простым:
Bookmark.tire.search :load => {:include => 'bookmarkable'}, :page => page, :per_page => per_page do
query do
fuzzy :title => { :value => query.downcase, :min_similarity => 0.6, :prefix_length => 2}
end
filter :terms, {:bookmarkable_type => ["Venue"], :user_id => [user.id]}
end
Теперь это не полное решение.И я надеюсь, что я даже правильно использую filter :terms
.Результат, который я сейчас получаю, - это массив закладок.Но для них легко загрузить действительные места проведения и, возможно, обернуть их в коллекцию WillPaginate для лучшей разбивки на страницы на интерфейсе.
Есть проблемы с этим решением?Как бы это сопоставилось с тем, что phoet
предложил при добавлении идентификаторов пользователей в индекс места проведения?