From 45a8a6897cdebaaf671db55d27057f1a97f3967f Mon Sep 17 00:00:00 2001 From: Seth Call Date: Fri, 14 Aug 2015 10:35:18 -0500 Subject: [PATCH] * wip --- db/up/jam_track_searchability.sql | 26 +- ruby/lib/jam_ruby/models/jam_track.rb | 15 +- ruby/lib/jam_ruby/models/search.rb | 2 +- .../JamTrackSearchScreen.js.jsx.coffee | 108 ++- .../stylesheets/client/jamkazam.css.scss | 9 + .../javascripts/jquery.infinitescroll.js | 622 +++++++++--------- .../javascripts/react-infinite-scroll.js | 73 ++ 7 files changed, 532 insertions(+), 323 deletions(-) create mode 100644 web/vendor/assets/javascripts/react-infinite-scroll.js diff --git a/db/up/jam_track_searchability.sql b/db/up/jam_track_searchability.sql index fbdaf9776..8483e476b 100644 --- a/db/up/jam_track_searchability.sql +++ b/db/up/jam_track_searchability.sql @@ -1,6 +1,28 @@ ALTER TABLE jam_tracks ADD COLUMN search_tsv tsvector; +ALTER TABLE jam_tracks ADD COLUMN artist_tsv tsvector; +ALTER TABLE jam_tracks ADD COLUMN name_tsv tsvector; + +CREATE FUNCTION jam_tracks_update_tsv() RETURNS TRIGGER AS $$ +BEGIN + new.search_tsv = to_tsvector('public.jamenglish', COALESCE(NEW.original_artist, '') || ' ' || COALESCE(NEW.name, '') || ' ' || COALESCE(NEW.additional_info, '')); + new.artist_tsv = to_tsvector('public.jamenglish', COALESCE(NEW.original_artist, '')); + new.name_tsv = to_tsvector('public.jamenglish', COALESCE(NEW.name, '')); + + RETURN NEW; +END +$$ LANGUAGE plpgsql; + CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE ON jam_tracks FOR EACH ROW EXECUTE PROCEDURE -tsvector_update_trigger(search_tsv, 'public.jamenglish', original_artist, name, additional_info); -CREATE INDEX jam_track_search_tsv_index ON jam_tracks USING gin(search_tsv); +jam_tracks_update_tsv(); + +CREATE INDEX jam_tracks_search_tsv_index ON jam_tracks USING gin(search_tsv); +CREATE INDEX jam_tracks_artist_tsv_index ON jam_tracks USING gin(artist_tsv); +CREATE INDEX jam_tracks_name_tsv_index ON jam_tracks USING gin(name_tsv); + +CREATE INDEX jam_tracks_name_key ON jam_tracks USING btree (name); +CREATE INDEX jam_tracks_original_artist_key ON jam_tracks USING btree (original_artist); +CREATE INDEX jam_tracks_status_key ON jam_tracks USING btree (status); + + UPDATE jam_tracks SET original_artist=original_artist, name=name, additional_info=additional_info; diff --git a/ruby/lib/jam_ruby/models/jam_track.rb b/ruby/lib/jam_ruby/models/jam_track.rb index 4c0f3a939..2dc47d69f 100644 --- a/ruby/lib/jam_ruby/models/jam_track.rb +++ b/ruby/lib/jam_ruby/models/jam_track.rb @@ -280,11 +280,17 @@ module JamRuby end if options[:artist_search] - query = query.where('original_artist ilike ?', "%#{options[:artist_search]}%") + tsquery = Search.create_tsquery(options[:artist_search]) + if tsquery + query = query.where("(artist_tsv @@ to_tsquery('jamenglish', ?))", tsquery) + end end if options[:song_search] - query = query.where('name ilike ?', "%#{options[:song_search]}%") + tsquery = Search.create_tsquery(options[:song_search]) + if tsquery + query = query.where("(name_tsv @@ to_tsquery('jamenglish', ?))", tsquery) + end end if options[:artist].present? @@ -369,7 +375,10 @@ module JamRuby query = query.where("jam_tracks.status = ?", 'Production') unless user.admin if options[:artist_search] - query = query.where('original_artist ilike ?', "%#{options[:artist_search]}%") + tsquery = Search.create_tsquery(options[:artist_search]) + if tsquery + query = query.where("(artist_tsv @@ to_tsquery('jamenglish', ?))", tsquery) + end end diff --git a/ruby/lib/jam_ruby/models/search.rb b/ruby/lib/jam_ruby/models/search.rb index 2cdc9d4ba..cae9aa38f 100644 --- a/ruby/lib/jam_ruby/models/search.rb +++ b/ruby/lib/jam_ruby/models/search.rb @@ -83,7 +83,7 @@ module JamRuby @search_type = :musicians User.musicians end - @results = rel.where("(name_c @@ to_tsquery('jamenglish', ?))", tsquery).limit(10) + @results = rel.where("(name_tsv @@ to_tsquery('jamenglish', ?))", tsquery).limit(10) @results end diff --git a/web/app/assets/javascripts/react-components/JamTrackSearchScreen.js.jsx.coffee b/web/app/assets/javascripts/react-components/JamTrackSearchScreen.js.jsx.coffee index 04c814b82..884cef916 100644 --- a/web/app/assets/javascripts/react-components/JamTrackSearchScreen.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/JamTrackSearchScreen.js.jsx.coffee @@ -11,6 +11,8 @@ MIX_MODES = context.JK.MIX_MODES input: null MAX_ARTIST_SHOW: 3 + filterOption:() -> + true render: () -> @@ -161,6 +163,7 @@ MIX_MODES = context.JK.MIX_MODES if !@state.first_search + # only show the artists links if the user typed the results if @state.type == 'user-input' artistSection = @@ -186,20 +189,27 @@ MIX_MODES = context.JK.MIX_MODES {jamtracks} +
No more Jamtracks
` options = {} + + + searchValue = if @state.search == 'SEPARATOR' then '' else window.JamTrackSearchInput + `