diff --git a/app/repositories/orient_db/learning_object_repository.rb b/app/repositories/orient_db/learning_object_repository.rb index bb6bef2b87fe6fb5fb3417adbacd65da7cbcb323..ef26ba155336cbbd8dbcb1d6fc25bc0a61f43e40 100644 --- a/app/repositories/orient_db/learning_object_repository.rb +++ b/app/repositories/orient_db/learning_object_repository.rb @@ -92,33 +92,11 @@ module OrientDb # FULLTEXT ENGINE LUCENE # METADATA {"analyzer":"org.apache.lucene.analysis.br.BrazilianAnalyzer"} def search(params) - # mount cache_key with params - valid_params = %w(query order subject type school_level year) - cache_key = "search_result/" - valid_params.each do |param| - if params[param].class == Array - cache_key += params[param].join('-') - else - cache_key += params[param].to_s - end - cache_key += '/' unless (param == valid_params.last) - end + cache_key = build_search_cache_key params # get results in cache or search Rails.cache.fetch(cache_key, expires_in: 10.minutes) do - qry = params[:query] - order = order_by(params[:order]) - - query = "SELECT FROM LearningObject WHERE [name, description, author] LUCENE '#{qry}'" - query += " AND out('IsAbout') CONTAINS (name in ['" + params[:subject].join("','") + "'])" unless params[:subject].blank? - unless params[:school_level].blank? - params[:school_level] << 'Ensino Fundamental Inicial' << 'Ensino Fundamental Final' if params[:school_level].include? 'Ensino Fundamental' - query += " AND out('IsAbout') CONTAINS (name in ['" + params[:school_level].join("','") + "'])" - end - query = "SELECT * FROM (" + query + ") WHERE " + fetch_types(params[:type]) unless params[:type].blank? - query = "SELECT * FROM (" + query + ") WHERE " + fetch_year(params[:year]) unless params[:year].blank? - query = "SELECT * FROM (" + query + ") ORDER BY #{order}" - query = "SELECT @rid.asString(), last_modified FROM (" + query + ")" + query = build_search_query params connection.query query, limit: 10000 end end @@ -184,5 +162,36 @@ module OrientDb "LearningObject" end + def build_search_query(params={}) + query = "SELECT FROM LearningObject WHERE [name, description, author] LUCENE '#{params[:query]}'" + query += " AND out('IsAbout') CONTAINS (name in ['" + params[:subject].join("','") + "'])" unless params[:subject].blank? + unless params[:school_level].blank? + params[:school_level] << 'Ensino Fundamental Inicial' << 'Ensino Fundamental Final' if params[:school_level].include? 'Ensino Fundamental' + query += " AND out('IsAbout') CONTAINS (name in ['" + params[:school_level].join("','") + "'])" + end + query = "SELECT * FROM (" + query + ") WHERE " + fetch_types(params[:type]) unless params[:type].blank? + query = "SELECT * FROM (" + query + ") WHERE " + fetch_year(params[:year]) unless params[:year].blank? + query = "SELECT * FROM (" + query + ") ORDER BY #{order_by(params[:order])}" + query = "SELECT @rid.asString(), last_modified FROM (" + query + ")" + query + end + + def search_params + %w(query order subject type school_level year) + end + + def build_search_cache_key(params={}) + cache_key = "search_result/" + search_params.each do |param| + if params[param].class == Array + cache_key += params[param].join('-') + else + cache_key += params[param].to_s + end + cache_key += '/' unless (param == search_params.last) + end + cache_key + end + end end