Wie kann ich eine Zeichenfolge zu einem Datenbank-Objekt-Attribut? Regexp?
Ich habe eine Datenbank mit einer Liste von Filmen. Ein typischer Eintrag wie folgt Aussehen:
id: 1,
title: "Manhatten and the Murderer",
year: 1928,
synopsis: 'some text...'
rating: 67,
genre_id, etc. etc.
Nun bin ich versucht zu machen, eine Reihe von such-tests, pass-und bisher habe ich noch aus einem einzigen Testfall übergeben, wo, wenn Sie den Titel eingeben "Manhatten und der Mörder" in einem text-Feld wird es den Film, den Sie möchten. Das problem mit partial matching.
Nun möchte ich eine Methode für die Suche "Manhat" und Spiel die Platte "Manhatten und der Mörder". Ich will auch, dass es passend zu jedem Film, der hat "Manhat" in ihm. Zum Beispiel, es würde zurückkehren, vielleicht 2 oder 3 andere Titel wie: "My life in Manhattan", Titel: "Der Big Apple in Manhattan" etc. etc.
Unten ist der code, den ich bisher in meinem Film Modell:
def self.search(query)
# Replace this with the appropriate ActiveRecord calls...
if query =~ where(title:)
#where(title: query)
binding.pry
end
end
Meine Frage ist, wie kann ich diese einrichten? Mein problem ist das "where(title:) - Linie. Ein Gedanke zu nutzen, um die Regexp-match das title-Attribut. Jede mögliche Hilfe würde geschätzt! Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie eine Abfrage, sucht einen Teilstring in zwischen:
Beispiel:
%Manhattan
erhalten Sie:Love in Manhattan
Manhattan%
erhalten:Manhattan and Company
%Manhattan%
bekommen Sie beides:[Love in Manhattan, Manhattan and Company]
Aber, wenn Sie sind auf der Suche durch Filme Synopse, die Sie verwenden sollten Denken Sphinx oder Elastic Search
Beispielsweise mit Elastic Search, Sie können die synopsis wie diese:
Hinzufügen
app/indices/movie_index.rb
:Index Ihre Daten mit
rake ts:index
Ausführen und anschließend die Sphynx mit:
rake ts:start
Können Sie suchen, so wie dieses:
Movie.search :conditions => {:synopsis => "Manhattan"}
Elastic Search ist eine tolle alternative zu ThinkingSphinx, es gibt sogar ein RailsCast über Sie, so sollten Sie auf jeden Fall einen Blick zu sehen, was wirklich am besten passt... Hoffe, das hilft!
ilike
. Oder verwenden Sie die~*
Betreiber und regexp.Brauchen Sie nicht regex zu finden, Filme, die den such-string. Sie können SQL-Abfrage wie diese:
Zurückgeben würde alle Filme beginnen mit "Batman"
Zurückgeben würde alle Filme, die Batman-überall in der überschrift.
Ich denke, dass Sie herausgefunden, das ' % ' - ist ein joker-Zeichen in der Abfrage.
Ist eine option, um eine Suche ausführen server neben Ihrer Rails-Anwendung. Es ist sicherlich meine gehen Sie zu Lösung. Diese route bietet eine Tonne von Funktionen, die nicht innerhalb von Rails selbst und vielleicht zu viel des guten, aber eine überlegung Wert.
Ich benutze Sphinx und implementieren es mit der thinking-sphinx gem.
Ressourcen:
http://pat.github.io/thinking-sphinx/
http://sphinxsearch.com/