From 3ff3502bbc11621813fdc81f903524ec9d4d2f43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cxxq250=E2=80=9D?= <“xxq250@qq.com”> Date: Tue, 1 Nov 2022 17:25:28 +0800 Subject: [PATCH 1/5] =?UTF-8?q?fixed=20=E9=A1=B9=E7=9B=AE=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E5=85=88es=20search?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/queries/projects/list_query.rb | 9 +++++++-- .../projects/elasticsearch_service.rb | 20 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 app/services/projects/elasticsearch_service.rb diff --git a/app/queries/projects/list_query.rb b/app/queries/projects/list_query.rb index 1994c9c71..140d973ea 100644 --- a/app/queries/projects/list_query.rb +++ b/app/queries/projects/list_query.rb @@ -25,7 +25,7 @@ class Projects::ListQuery < ApplicationQuery def filter_projects(collection) # collection = by_pinned(collection) - collection = by_search(collection) + collection = by_search(collection) if params[:search].present? collection = by_project_type(collection) collection = by_project_category(collection) collection = by_project_language(collection) @@ -33,7 +33,12 @@ class Projects::ListQuery < ApplicationQuery end def by_search(items) - items.visible.by_name_or_identifier(params[:search]) + ids = Projects::ElasticsearchService.call(params[:search]) + if ids.present? + items.visible.where(id: ids) + else + items.visible.by_name_or_identifier(params[:search]) + end end def by_project_type(items) diff --git a/app/services/projects/elasticsearch_service.rb b/app/services/projects/elasticsearch_service.rb new file mode 100644 index 000000000..466e17ffd --- /dev/null +++ b/app/services/projects/elasticsearch_service.rb @@ -0,0 +1,20 @@ +class Projects::ElasticsearchService < ApplicationService + attr_reader :keyword + + def initialize(keyword) + @keyword = keyword + end + + def call + domain = EduSetting.get("search_api_url") || "https://statistics.gitlink.org.cn" + api_url = "#{domain}/search?page=1&size=1000&term=#{@keyword}&type=1" + response = Faraday.get(api_url) + result = JSON.parse(response&.body) + project_ids = result[:data][:rows].map{|d|d[:instanceId]} + project_ids + rescue => e + puts "ElasticsearchService error: #{e.message}" + raise Error, e.message + end + +end From c7a6d78c15150ed8b849c71bf5ba0fa47082f4e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cxxq250=E2=80=9D?= <“xxq250@qq.com”> Date: Tue, 1 Nov 2022 17:27:31 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fixed=20=E9=A1=B9=E7=9B=AE=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E5=85=88es=20search?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/projects/elasticsearch_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/projects/elasticsearch_service.rb b/app/services/projects/elasticsearch_service.rb index 466e17ffd..24d57cfa2 100644 --- a/app/services/projects/elasticsearch_service.rb +++ b/app/services/projects/elasticsearch_service.rb @@ -10,7 +10,7 @@ class Projects::ElasticsearchService < ApplicationService api_url = "#{domain}/search?page=1&size=1000&term=#{@keyword}&type=1" response = Faraday.get(api_url) result = JSON.parse(response&.body) - project_ids = result[:data][:rows].map{|d|d[:instanceId]} + project_ids = result['data']['rows'].map{|d|d['instanceId']} project_ids rescue => e puts "ElasticsearchService error: #{e.message}" From 63ea4808c9874f394f86deef7772e50ad4ac9ccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cxxq250=E2=80=9D?= <“xxq250@qq.com”> Date: Tue, 1 Nov 2022 17:30:01 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fixed=20=E9=A1=B9=E7=9B=AE=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E5=85=88es=20search=20=E4=B8=AD=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/projects/elasticsearch_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/projects/elasticsearch_service.rb b/app/services/projects/elasticsearch_service.rb index 24d57cfa2..2156f5e76 100644 --- a/app/services/projects/elasticsearch_service.rb +++ b/app/services/projects/elasticsearch_service.rb @@ -7,7 +7,7 @@ class Projects::ElasticsearchService < ApplicationService def call domain = EduSetting.get("search_api_url") || "https://statistics.gitlink.org.cn" - api_url = "#{domain}/search?page=1&size=1000&term=#{@keyword}&type=1" + api_url = URI.encode("#{domain}/search?page=1&size=1000&term=#{@keyword}&type=1") response = Faraday.get(api_url) result = JSON.parse(response&.body) project_ids = result['data']['rows'].map{|d|d['instanceId']} From 79dae01a69be70309ed85cebbdaacb87b0566af8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cxxq250=E2=80=9D?= <“xxq250@qq.com”> Date: Tue, 1 Nov 2022 17:31:33 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fixed=20=E9=A1=B9=E7=9B=AE=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E5=85=88es=20search=20=E4=B8=AD=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/queries/projects/list_query.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/queries/projects/list_query.rb b/app/queries/projects/list_query.rb index 140d973ea..8530207eb 100644 --- a/app/queries/projects/list_query.rb +++ b/app/queries/projects/list_query.rb @@ -35,7 +35,7 @@ class Projects::ListQuery < ApplicationQuery def by_search(items) ids = Projects::ElasticsearchService.call(params[:search]) if ids.present? - items.visible.where(id: ids) + items.visible.where(id: ids).by_name_or_identifier(params[:search]) else items.visible.by_name_or_identifier(params[:search]) end From 2bd723fc6475a39f7d2c668808c92ecab72ec818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cxxq250=E2=80=9D?= <“xxq250@qq.com”> Date: Tue, 1 Nov 2022 17:37:25 +0800 Subject: [PATCH 5/5] =?UTF-8?q?fixed=20=E9=A1=B9=E7=9B=AE=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E5=85=88es=20search=E6=9C=8D=E5=8A=A1=E5=AE=B9?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/projects/elasticsearch_service.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/projects/elasticsearch_service.rb b/app/services/projects/elasticsearch_service.rb index 2156f5e76..cbe9eefea 100644 --- a/app/services/projects/elasticsearch_service.rb +++ b/app/services/projects/elasticsearch_service.rb @@ -13,8 +13,8 @@ class Projects::ElasticsearchService < ApplicationService project_ids = result['data']['rows'].map{|d|d['instanceId']} project_ids rescue => e - puts "ElasticsearchService error: #{e.message}" - raise Error, e.message + Rails.logger.info "ElasticsearchService error: #{e.message}" + [] end end