2010-01-31 19 views
10

İlk Ruby on Rails uygulamasını yazıyorum ve bir "arama" özelliğini uygulamanız gerekiyor. Veritabanını (3 farklı tabloda tablo başına 1 sütun) aramak ve en alakalı sonuçları 3 kategorinin her birinde döndürmek gerekir. Amazon.com'da, tüm farklı departmanların sonuçlarını döndüren bir araştırmayı nasıl yapabileceğiniz gibi.Ruby on Rails 3 uygulamasında arama gerçekleştiriliyor mu?

Ruby on Rails dünyasında bilmem gereken (Rails 3 ile çalışan) bir mücevher/kütüphane/ortak teknik var mı? Aksi halde, başvurumda bir arama özelliğini uygulamak için ne yapmalıyım?

cevap

2

Muhtemelen bazı arama motorlarını kullanmanız gerekecektir. thinking sphinx eklentisine bir göz atın. Ayrıca acts_as_ferret kullandım ama bazı sorunlara neden olabilir.

Sizin için ne istediğinizi yapan bir eklenti olup olmadığını bilmiyorum. Ben öyle yapardı:

  1. arama (sql ile veya vb Sfenks gibi bazı arama motoru ile)
  2. Sonra otomatik tamamlanması için bazı ajax şeyler eklemek uygulamak.

Google arkadaşın: take a look here ve here.

4

Sanırım, aramanızla ilgili "ciddi" duruma bağlı.

Sadece "LIKE '% xyz%'" ifadeleri oluşturarak elle yapacağınız bazı basit VARCHAR alanlarında arama yapmak istiyorsanız, ihtiyacınız olan tek şey sizin için bunu yapan bir eklentidir. Benim favorim searchlogic. Modellerinizde, diğer zincirlerde olduğu gibi birlikte zincirleme yapabileceğiniz oldukça kullanışlı birkaç dinamik kapsam sağlar.

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

İşte diğer özellikleri kullanmak için nasıl bir great screencast var: Örneğin böyle bir şey yazabilirsiniz.

Ancak SQL LIKE deyimi, büyük metin parçalarını aramak için gerçekten uygun değil. Yani ihtiyacınız olan buysa, verilerinizi gerçekten endeksleyen bir eklenti kullanmanız daha iyi olur.

Bu durumda thinking sphinx (diğer cevaplarda belirtilmiştir) mükemmel bir çözümdür. Sadece bazı platform özel kurulum adımları gerektirdiğini ve sadece PostreSQL ve MySQL ile çalıştığını unutmayın (Rails'in varsayılan SQLite ile çalışmaz). Bunu kullanmak o kadar da basit değil - aramak istediğiniz her modelde indekslemek, indeksi oluşturmak, Sphinx'i başlatmak vs. için neyin endekslenmesi gerektiğini tanımlamanız gerekir.