From 4e6a500fb2d3ce4422618225b1bc3527dc9828e7 Mon Sep 17 00:00:00 2001 From: Suzanne Vogt Date: Thu, 12 Jun 2025 17:34:58 -0400 Subject: [PATCH 1/3] Add normalizer to opensearch mapper to help implement case insensitive search for doi and id fields. --- app/models/doi.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/doi.rb b/app/models/doi.rb index 38702dab7..f33b71d18 100644 --- a/app/models/doi.rb +++ b/app/models/doi.rb @@ -183,9 +183,9 @@ def validate_publisher_obj?(doi) }, } do mapping dynamic: "false" do - indexes :id, type: :keyword + indexes :id, type: :keyword, normalizer: "keyword_lowercase" indexes :uid, type: :keyword, normalizer: "keyword_lowercase" - indexes :doi, type: :keyword + indexes :doi, type: :keyword, normalizer: "keyword_lowercase" indexes :identifier, type: :keyword indexes :url, type: :text, fields: { keyword: { type: "keyword" } } indexes :creators, type: :object, properties: { From 3e30a71f9d7657620c1d9dc70923211b07f6e244 Mon Sep 17 00:00:00 2001 From: Suzanne Vogt Date: Fri, 13 Jun 2025 12:20:31 -0400 Subject: [PATCH 2/3] Add tests to verify case insensitive search using query=doi:... or query-id:... --- .../datacite_dois/datacite_dois_spec.rb | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/spec/requests/datacite_dois/datacite_dois_spec.rb b/spec/requests/datacite_dois/datacite_dois_spec.rb index 2bd8ae861..22c7d6a69 100755 --- a/spec/requests/datacite_dois/datacite_dois_spec.rb +++ b/spec/requests/datacite_dois/datacite_dois_spec.rb @@ -1562,7 +1562,7 @@ def clear_doi_index expect(json["dois"].first).to eq("10.14454/3mfp-6m52") end end - + describe "GET /dois/DOI/get-url", vcr: true, elasticsearch: true do context "it works" do let!(:doi) { create(:doi, client: client, doi: "10.5438/fj3w-0shd", url: "https://blog.datacite.org/data-driven-development/", event: "publish") } @@ -1879,4 +1879,54 @@ def clear_doi_index expect(json.dig("meta", "openLicensesCount")).to eq(13) end end + + describe "GET /dois/query=doi:... - CASE INSENSITIVE", vcr: true, elasticsearch: true do + context "it works" do + let!(:doi) { create(:doi, client: client, doi: "10.5438/fj3w-0shd", url: "https://blog.datacite.org/data-driven-development/", event: "publish") } + + before do + import_doi_index + end + + it "returns DOI LOWERCASE" do + get "/dois?query=doi:10.5438/fj3w-0shd", nil, headers + expect(last_response.status).to eq(200) + end + + it "returns DOI UPPERCASE" do + get "/dois?query=doi:10.5438/FJ3W-0SHD", nil, headers + expect(last_response.status).to eq(200) + end + + it "returns DOI MIXED CASE" do + get "/dois?query=doi:10.5438/Fj3W-0sHd", nil, headers + expect(last_response.status).to eq(200) + end + end + end + + describe "GET /dois/query=id:... - CASE INSENSITIVE", vcr: true, elasticsearch: true do + context "it works" do + let!(:doi) { create(:doi, client: client, doi: "10.5438/fj3w-0shd", url: "https://blog.datacite.org/data-driven-development/", event: "publish") } + + before do + import_doi_index + end + + it "returns DOI LOWERCASE" do + get "/dois?query=id:10.5438/fj3w-0shd", nil, headers + expect(last_response.status).to eq(200) + end + + it "returns DOI UPPERCASE" do + get "/dois?query=id:10.5438/FJ3W-0SHD", nil, headers + expect(last_response.status).to eq(200) + end + + it "returns DOI MIXED CASE" do + get "/dois?query=id:10.5438/Fj3W-0sHd", nil, headers + expect(last_response.status).to eq(200) + end + end + end end From a92e03634fde40254a885fc6ab9942a2384d759e Mon Sep 17 00:00:00 2001 From: Suzanne Vogt Date: Fri, 13 Jun 2025 12:23:46 -0400 Subject: [PATCH 3/3] Appease rubocop. --- spec/requests/datacite_dois/datacite_dois_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/requests/datacite_dois/datacite_dois_spec.rb b/spec/requests/datacite_dois/datacite_dois_spec.rb index 22c7d6a69..9bbb6272d 100755 --- a/spec/requests/datacite_dois/datacite_dois_spec.rb +++ b/spec/requests/datacite_dois/datacite_dois_spec.rb @@ -1562,7 +1562,7 @@ def clear_doi_index expect(json["dois"].first).to eq("10.14454/3mfp-6m52") end end - + describe "GET /dois/DOI/get-url", vcr: true, elasticsearch: true do context "it works" do let!(:doi) { create(:doi, client: client, doi: "10.5438/fj3w-0shd", url: "https://blog.datacite.org/data-driven-development/", event: "publish") }