Mam aplikację 4 szyn z liczbą modeli i widokami stron. Układ aplikacji mojej aplikacji zawiera pasek wyszukiwania. Ale teraz jest nieaktywny. Celem paska wyszukiwania jest umożliwienie użytkownikowi przeszukiwania wszystkich modeli dla wprowadzonego słowa kluczowego, co powoduje, że jest to wyszukiwanie globalne. Czy jest jakiś klejnot, który dokonuje powszechnego wyszukiwania? Czy trzeba to zrobić ręcznie za pomocą zapytań sql? Mogłem zobaczyć sposób wdrożenia wyszukiwania określonego modelu na jego stronie widoku. Ale chcę, żeby przeszukała wszystkie modele naraz. Jak powinienem to zrobić?Implementacja wyszukiwania uniwersalnego w szynach 4
Odpowiedz
Myślę, że najlepszym sposobem, w twoim przypadku jest użycie ElasticSearch. Czysty klejnot integracji jest dostępny pod numerem here. Linki do dokumentacji znajdują się na tej stronie.
Sunspot to jeden z najczęściej używanych klejnotów do dodawania wyszukiwania w aplikacji Rails.
indeksowania wygląda następująco:
class Post < ActiveRecord::Base
searchable do
text :title, :body
text :comments do
comments.map { |comment| comment.body }
end
integer :blog_id
integer :author_id
integer :category_ids, :multiple => true
time :published_at
string :sort_title do
title.downcase.gsub(/^(an?|the)\b/, '')
end
end
end
i wyszukiwanie:
Post.search do
fulltext 'best pizza'
with :blog_id, 1
with(:published_at).less_than Time.now
order_by :published_at, :desc
paginate :page => 2, :per_page => 15
facet :category_ids, :author_id
end
Sunspot umożliwia pojedynczy wyszukiwania w wielu modelach – lulalala
Jednym z dobrych podejść do tego będzie użycie gem 'searchkick'
, która korzysta z elastycznego przeszukiwania.
Zasoby dla Searchkick: https://github.com/ankane/searchkick https://github.com/ankane/searchkick#advanced
Nie gem utworzyć indeks za model? czy istnieje sposób na stworzenie jednego indeksu dla wszystkich modeli? lub alternatywnie jak przeszukujesz raz na wielu indeksach? wskazanie mi linku jest dla mnie wystarczająco dobre. –
Co powiesz na gem pg_search? Czy to jest wystarczająco warte. Ponieważ moja baza danych nie jest zbyt duża, by pozwolić sobie na plamę słoneczną. –
@VivekTripathi cóż, jeśli twoje wyszukiwanie jest tak proste, możesz skorzystać z 'pg_search', ale oznacza to, że utknąłeś w DB i nie jest on skalowalny, gdy twoja aplikacja się rozwija. – Almaron