2015-03-11 15 views
6

Ich habe eine Schiene 4 Anwendung mit der Anzahl der Modelle und Ansicht Seiten. Das Anwendungslayout meiner Anwendung enthält eine Suchleiste. Aber es ist jetzt inaktiv. Der Zweck der Suchleiste ist es, dem Benutzer zu ermöglichen, alle Modelle nach den eingegebenen Schlüsselwörtern zu durchsuchen, was im Grunde eine globale Suche ergibt. Gibt es ein Juwel, das universelle Suche durchführt? Oder es muss manuell über SQL-Abfragen getan werden? Ich könnte sehen, wie Sie die Suche nach einem bestimmten Modell auf seiner Ansichtsseite implementieren können. Aber ich möchte, dass alle Modelle gleichzeitig durchsucht werden. Wie soll ich vorgehen?Implementieren Universelle Suche in Schienen 4

Antwort

5

Ich denke, der beste Weg, in Ihrem Fall ist Elasticsearch zu verwenden. Ein ordentliches Integrationsstück wird zur Verfügung gestellt here. Links zur Dokumentation finden Sie auf dieser Seite.

+0

einzelne Suche über mehrere Modelle erlaubt Hat nicht der Edelstein einen Index pro Modell erstellen? Gibt es eine Möglichkeit, einen Index für alle Modelle zu erstellen? Oder wie suchst du einmal auf mehreren Indizes? mich auf einen Link zu zeigen, ist gut genug für mich. –

+0

Wie wäre es mit pg_search Juwel? Ist es genug wert? Weil meine Datenbank nicht zu groß ist, um sich einen Sonnenfleck zu leisten. –

+1

@VivekTripathi Nun, wenn deine Suche so einfach ist, könntest du 'pg_search' verwenden, aber das bedeutet, dass du in deiner Datenbank hängen bleibst und sie nicht ganz skalierbar ist, wenn deine App wächst. – Almaron

3

Sunspot ist einer der am häufigsten verwendeten Edelstein, um Suche in einer Rails App hinzuzufügen.

Indexing sieht wie folgt aus:

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 

und Suche:

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 
+1

Sunspot – lulalala