Wie Sie Textacular Gem verwenden, um Daten in Ihrer Rails-Anwendung zu suchen

Wir haben vielleicht schon von vielen Gems gehört, mit denen wir Suchfunktionen in unsere Rails-Anwendung implementieren können; zum Beispiel: searchkick, elasticsearch-rails, ransack und schließlich sunspot für die Arbeit mit der Solr-Suchmaschine. Alle diese Gems haben ihre eigenen Vorteile. Sowohl searchkick als auch elasticsearch verwenden redis, um die Daten zu durchsuchen, und müssen beim Einfügen neuer Daten einen 'reindex' durchführen. In einem meiner letzten Projekte habe ich zufällig ein Gem namens Textacular verwendet. Es ist einfach und sehr leicht zu bedienen.

Textacular Gem:

Es ist ein Juwel, das Volltextsuchfunktionen für PostgreSQL-Datenbanken bietet. Es dient im Wesentlichen dazu, den Umfang der von activerecord durchgeführten Arbeit auf eine ziemlich freundliche Weise zu erweitern. Es funktioniert auch auf Heroku. Dieses Gem funktioniert nur auf PostgreSQL Um damit arbeiten zu können, müssen wir zuerst das neueste textacular gem von https://rubygems.org/gems/textacular herunterladen und es zur gemfile hinzufügen.
gem 'textacular'
      bundle install
Textacular gem bietet uns eine ganze Reihe von Methoden zur Suche in den Daten. Alle unsere Modelle haben also Zugang zu diesen Methoden. basic_search erweiterte_Suche fuzzy_search Verwendung: Basic_search: Sie sucht auf der Grundlage des eingegebenen Textes.
User.basic_search('abc') # Sucht nach allen Attributen der Modellspalte
User.basic_search(nachname: 'abc', vorname: 'xyz')
Erweiterte_Suche: Hier können wir Postgres-Syntaxen wie !, & und | (und, oder und, nicht) und einige andere, je nach Anforderung, verwenden. Es konvertiert die Such-DSL des Benutzers in die Pg-Syntax. Dazu müssen wir sicherstellen, dass die notwendigen Ausnahmen verwendet werden, um die Syntaxfehler zu behandeln.
User.advanced_search(last_name: 'text1|text2') - Es sucht mit text1 oder text2 nach last_name im User-Modell.
User.advanced_search(last_name: '!text2') - Es wird nach den Datensätzen gesucht, deren Nachname nicht text2 ist.
Diese Suchvorgänge können wie unten dargestellt verkettet werden:
User.advanced_search(last_name: 'text1|text2').basic_search(last_name: 'abc', first_name: 'xyz')
Unscharfe_Suche: Um mit fuzzy_search arbeiten zu können, müssen wir das Modul pg_trgm installieren. Führen Sie den folgenden Befehl aus, um dieses Modul zu installieren. Es sucht nach dem teilweisen Auftreten Ihres Textes in der DB.
rake textacular:create_trigram_migration
rake db:migrate
Jetzt sind wir bereit, fuzzy_search zu verwenden.
User.fuzzy_search('Lorem')
Standardmäßig wird bei der unscharfen Suche nach den Datensätzen gesucht, die 30% des Suchtextes in Bezug auf den gesamten Inhalt entsprechen. Wir können diesen Schwellenwert mit dem folgenden Befehl festlegen.
ActiveRecord::Base.connection.execute("SELECT set_limit(0.6);")
Es wird also erwartet, dass 60% des Suchtextes mit dem ursprünglichen Inhalt übereinstimmt. Wir können die OR-Bedingung verwenden, um in mehreren Spalten zu suchen. Sie müssen einen Hash mit Spalten mit Eingabetext als Parameter eins und den zweiten Parameter als false übergeben. Es nimmt AND, wenn Sie den zweiten Parameter vermissen oder wenn er True ist.
User.fuzzy_search({Vorname: 'user', Nachname: 'test'}, false)
User.fuzzy_search(vorname: 'user', nachname: 'test') - Nimmt AND-Bedingung.
Standardmäßig sucht Textacular in allen Text- und String-Spalten. Wir können das Standardverhalten ändern, indem wir die searchable_columns-Methode im Modell überschreiben.
def self.searchable_columns
    [:title, :body]
end
Wir können self.searchable_language im Modell überschreiben, um die richtigen Wörterbucheinstellungen festzulegen.
def self.searchable_language
   'arabisch'
end
Bitte prüfen Sie die offiziellen Dokumente von gem für die globale Suche und mehr.

Abonnieren Sie die neuesten Updates

zusammenhängende Posts

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEGerman