2010-01-31 11 views
10

Piszę swoją pierwszą aplikację Ruby on Rails i muszę zaimplementować funkcję "wyszukiwania". Będzie musiał przeszukać bazę danych (1 kolumna na tabelę w 3 różnych tabelach) i zwrócić najbardziej odpowiednie wyniki w każdej z 3 kategorii. Trochę jak można zrobić wyszukiwanie na Amazon.com, które zwróci wyniki z wszystkich różnych działów.Wdrażanie wyszukiwania w aplikacji Ruby on Rails 3?

Czy istnieje klejnot/biblioteka/wspólna technika w świecie Ruby on Rails, o której powinienem wiedzieć (działający z Railsami 3)? W przeciwnym razie, co powinienem zrobić, aby zaimplementować funkcję wyszukiwania w mojej aplikacji?

Odpowiedz

2

Prawdopodobnie musisz użyć wyszukiwarki. Spójrz na wtyczkę thinking sphinx. Użyłem także acts_as_ferret, ale może to powodować pewne problemy.

Nie wiem, czy istnieje wtyczka, która robi wszystko, co chcesz dla Ciebie. Chciałbym zrobić to w ten sposób:

  1. Wdrożenie poszukiwania (z SQL lub z jakiejś wyszukiwarki jak Sfinks itp)
  2. Następnie dodać kilka rzeczy ajax dla autouzupełniania.

Google to Twój przyjaciel: take a look here i here.

4

Myślę, że to zależy od tego, jak "poważnie" traktujesz swoje poszukiwania.

Jeśli chcesz po prostu wyszukiwać w prostych polach VARCHAR, które robisz ręcznie, generując instrukcje "LIKE"% xyz% "", to wszystko, czego potrzebujesz, to wtyczka, która robi to za ciebie. Moim ulubionym jest tutaj searchlogic. Umożliwia kilka poręcznych zakresów dynamicznych w twoich modelach, które możesz łączyć ze sobą (jak inne zakresy). Na przykład można napisać coś takiego:

User.last_name_like("Doe").age_gt(30).age_lt(40) 

Oto great screencast, w jaki sposób korzystać z jego innych funkcji.

Jednak instrukcja SQL LIKE nie nadaje się do wyszukiwania dużych fragmentów tekstu. Jeśli tego właśnie potrzebujesz, lepiej użyć wtyczki, która faktycznie indeksuje dane.

W takim przypadku thinking sphinx (wymienione w innych odpowiedziach) jest doskonałym rozwiązaniem. Pamiętaj, że wymaga to pewnych kroków instalacji i działa tylko z PostreSQL i MySQL (nie działa z domyślnym SQLite Railsów). Używanie go również nie jest proste - musisz zdefiniować indeksowanie każdego modelu, który chcesz przeszukać, zbudować indeks, uruchomić Sphinx itp.