Skip to content

Commit

Permalink
add the option to choose to use index or api in the browse page
Browse files Browse the repository at this point in the history
  • Loading branch information
syphax-bouazzouni committed Mar 9, 2024
1 parent c61c8e1 commit df0ad12
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 32 deletions.
97 changes: 69 additions & 28 deletions app/controllers/concerns/submission_filter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,32 +15,43 @@ def init_filters(params)
end

def submissions_paginate_filter(params)
request_params = filters_params(params, page: params[:page])
request_params = filters_params(params, page: params[:page], pagesize: 10)
filter_params = params.permit(@filters.keys).to_h
init_filters(params)

@analytics = helpers.ontologies_analytics
@ontologies = LinkedData::Client::Models::Ontology.all(include: 'all', also_include_views: @show_views)
@analytics = Rails.cache.fetch("ontologies_analytics-#{Time.now.year}-#{Time.now.month}") do
helpers.ontologies_analytics
end
@ontologies = LinkedData::Client::Models::Ontology.all(include: 'notes,projects', also_include_views: @show_views, display_links: false, display_context: false)

# get fair scores of all ontologies
@fair_scores = fairness_service_enabled? ? get_fair_score('all') : nil

@total_ontologies = @ontologies.size
submissions = helpers.search_ontologies(
query: @search,
status: request_params[:status],
show_views: @show_views,
private_only: @show_private_only,
languages: request_params[:naturalLanguage],
page_size: @total_ontologies + 100,
formality_level: request_params[:hasFormalityLevel],
is_of_type: request_params[:isOfType],
groups: request_params[:group], categories: request_params[:hasDomain],
formats: request_params[:hasOntologyLanguage]
)
params = { query: @search,
status: request_params[:status],
show_views: @show_views,
private_only: @show_private_only,
languages: request_params[:naturalLanguage],
page_size: @total_ontologies,
formality_level: request_params[:hasFormalityLevel],
is_of_type: request_params[:isOfType],
groups: request_params[:group], categories: request_params[:hasDomain],
formats: request_params[:hasOntologyLanguage] }
submissions = []
@time = Benchmark.realtime do
if params[:search_backend].eql?('api') || params[:search_backend].eql?('0')
submissions = filter_using_data(**params)
else
submissions = filter_using_index(**params)
end
end

submissions = submissions.reject { |sub| sub.ontology.nil? }.map { |sub| ontology_hash(sub, @ontologies) }

submissions = sort_submission_by(submissions, @sort_by) if @search.blank?

submissions = sort_submission_by(submissions, @sort_by) if @search.blank?


@page = paginate_submissions(submissions, request_params[:page].to_i, request_params[:pagesize].to_i)

Expand All @@ -55,6 +66,39 @@ def ontologies_filter_url(filters, page: 1, count: false)

private

def filter_using_index(query:, status:, show_views:, private_only:, languages:, page_size:, formality_level:, is_of_type:, groups:, categories:, formats:)
helpers.search_ontologies(
query: query,
status: status,
show_views: show_views,
private_only: private_only,
languages: languages,
page_size: page_size,
formality_level: formality_level,
is_of_type: is_of_type,
groups: groups, categories: categories,
formats: formats
)

end

def filter_using_data(query:, status:, show_views:, private_only:, languages:, page_size:, formality_level:, is_of_type:, groups:, categories:, formats:)
submissions = LinkedData::Client::Models::OntologySubmission.all(include: 'all', also_include_views: show_views, display_links: false, display_context: false)
submissions.select do |s|
out = !s.ontology.nil?
out = out && ((s.ontology.viewingRestriction.eql?('public') && !private_only) || private_only && s.ontology.viewingRestriction.eql?('private'))
out = out && (query.blank? || [s.description, s.ontology.name, s.ontology.acronym].any? { |x| x.downcase.include?(query.downcase) })
out = out && (groups.blank? || (s.ontology.group.map { |x| x.split('/').last } & groups.split(',')).any?)
out = out && (categories.blank? || (s.ontology.hasDomain.map { |x| x.split('/').last } & categories.split(',')).any?)
out = out && (status.blank? || status.split(',').include?(s.status))
out = out && (formats.blank? || formats.split(',').any? { |f| s.hasOntologyLanguages.eql?(f) })
out = out && (is_of_type.blank? || is_of_type.split(',').any? { |f| s.isOfType.split('/').last.eql?(f) })
out = out && (formality_level.blank? || formality_level.split(',').any? { |f| s.hasFormalityLevel.split('/').last.eql?(f) })
out = out && (languages.blank? || languages.split(',').any? { |f| s.naturalLanguage.split('/').last.eql?(f) })
out
end
end

def paginate_submissions(all_submissions, page, size)
current_page = page
page_size = size
Expand Down Expand Up @@ -126,7 +170,6 @@ def filters_params(params, includes: BROWSE_ATTRIBUTES.join(','), page: 1, pages
@filters[:show_retired] = 'true'
end


filters_values_map.each do |filter, api_key|
next if params[filter].nil? || params[filter].empty?

Expand All @@ -150,7 +193,9 @@ def filters_params(params, includes: BROWSE_ATTRIBUTES.join(','), page: 1, pages

def ontology_hash(sub, ontologies)
o = {}
ont = ontologies.select { |x| x.acronym.eql?(sub.ontology.acronym) }.first || sub.ontology
ont = sub.ontology
ont.notes = ontologies.select { |x| x.acronym.eql?(sub.ontology.acronym) }.first&.notes || []
ont.projects = ontologies.select { |x| x.acronym.eql?(sub.ontology.acronym) }.first&.projects || []

add_ontology_attributes(o, ont)
add_submission_attributes(o, sub)
Expand Down Expand Up @@ -200,7 +245,7 @@ def add_submission_attributes(ont_hash, sub)
end

def add_ontology_attributes(ont_hash, ont)
return if ont.nil?
return if ont.nil?

ont_hash[:id] = ont.id
ont_hash[:type] = ont.viewOf.nil? ? 'ontology' : 'ontology_view'
Expand Down Expand Up @@ -229,11 +274,11 @@ def add_fair_score_metrics(ont_hash, ont)

def ontology_filters_init(categories, groups)
@languages = submission_metadata.select { |x| x['@id']['naturalLanguage'] }.first['enforcedValues'].map do |id, name|
{ 'id' => id.split('/').last, 'name' => name, 'value' => id.split('/').last, 'acronym' => name }
{ 'id' => id, 'name' => name, 'value' => id.split('/').last, 'acronym' => name }
end

@formalityLevel = submission_metadata.select { |x| x['@id']['hasFormalityLevel'] }.first['enforcedValues'].map do |id, name|
{ 'id' => id, 'name' => name, 'acronym' => name.camelize(:lower), 'value' => name.delete(' ')}
{ 'id' => id, 'name' => name, 'acronym' => name.camelize(:lower), 'value' => name.delete(' ') }
end

@isOfType = submission_metadata.select { |x| x['@id']['isOfType'] }.first['enforcedValues'].map do |id, name|
Expand Down Expand Up @@ -268,10 +313,10 @@ def ontology_filters_init(categories, groups)
{
categories: object_filter(categories, :categories),
groups: object_filter(groups, :groups),
naturalLanguage: object_filter(@languages, :naturalLanguage, "id"),
naturalLanguage: object_filter(@languages, :naturalLanguage, "value"),
hasFormalityLevel: object_filter(@formalityLevel, :hasFormalityLevel),
isOfType: object_filter(@isOfType, :isOfType),
#missingStatus: object_filter(@missingStatus, :missingStatus)
# missingStatus: object_filter(@missingStatus, :missingStatus)
}
end

Expand All @@ -280,12 +325,9 @@ def check_id(name_value, objects, name_key)
selected_category.first && selected_category.first['id']
end

def object_checks(key)
params[key]&.split(',')
end

def object_filter(objects, object_name, name_key = 'acronym')
checks = object_checks(object_name) || []
checks = params[object_name]&.split(',') || []
checks = checks.map { |x| check_id(x, objects, name_key) }.compact

ids = objects.map { |x| x['id'] }
Expand All @@ -301,7 +343,6 @@ def count_objects(ontologies)
@filters = ontology_filters_init(@categories, @groups)
object_names = @filters.keys


@filters.each do |filter, values|
objects = values.first
objects_count[filter] = objects.map { |v| [v['id'], 0] }.to_h
Expand Down
5 changes: 3 additions & 2 deletions app/helpers/search_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ def search_ontologies(query: '*', groups: [], categories: [], languages: [], pri

visibility = private_only ? "private" : 'public'
qf = [
#"ontology_acronymSuggestEdge^25 ontology_nameSuggestEdge^15 descriptionSuggestEdge^10 ", # start of the word first
"ontology_acronymSuggestEdge^25 ontology_nameSuggestEdge^15 descriptionSuggestEdge^10 ", # start of the word first
"ontology_acronym_text^15 ontology_name_text^10 description_text^5 "
]
submissions = LinkedData::Client::HTTP.get('search/ontologies',
{ query: "*#{query}*", groups: groups,
{ query: query.blank? ? "*" : "*#{query}*",
groups: groups,
hasDomain: categories,
hasOntologyLanguage: formats,
status: status,
Expand Down
2 changes: 1 addition & 1 deletion app/views/ontologies/browser/_ontologies.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
current_page: @page.page, next_page: @page.nextPage) do |c|

- if @page.page.eql?(1)
= content_tag(:p, class: "browse-desc-text", style: "margin-bottom: 12px !important;") { "Showing #{@count} of #{@total_ontologies}" }
= content_tag(:p, class: "browse-desc-text", style: "margin-bottom: 12px !important;") { "Showing #{@count} of #{@total_ontologies} (#{sprintf("%.2f", @time)}s)" }

- ontologies = c.collection
- ontologies.each do |ontology|
Expand Down
2 changes: 1 addition & 1 deletion app/views/ontologies/browser/browse.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
.browse-filter-checks-container
- values.first.each do |object|
- title = (key.eql?(:categories) || key.eql?(:groups)) ? nil : ''
= group_chip_component(name: key, object: object, checked: values[1]&.include?(object["id"]), title: title) do |c|
= group_chip_component(name: key, object: object, checked: values[1]&.include?(object["id"]) || values[1]&.include?(object["value"]) , title: title) do |c|
- c.count do
%span.badge.badge-light.ml-1
= turbo_frame_tag "count_#{key}_#{object["id"]}", busy: true
Expand Down

0 comments on commit df0ad12

Please sign in to comment.