Skip to content

Commit 774bf7f

Browse files
committed
Add new endpoint to query specialist-finder index
New parallel stack to the existing search endpoint so we don't interfere with existing search functionality. When doing the testing, we've noticed that certain things are configured only for government_test index but not for the govuk (and hence also our new index) - such as spelling typo suggestions, and organisation expansion. Should the tests be more explicit about calling this out?
1 parent 41a0593 commit 774bf7f

8 files changed

+627
-25
lines changed

Diff for: lib/rummager/app.rb

+21
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,27 @@ def json_only
143143
halt(500, env["sinatra.error"].message)
144144
end
145145

146+
# Return results for the Specialist Finder searches
147+
#
148+
# For details, see docs/search-api.md
149+
["/specialist-documents-search.?:request_format?", "/api/specialist-documents-search.?:request_format?"].each do |path|
150+
get path do
151+
json_only
152+
153+
query_params = parse_query_string(request.query_string)
154+
155+
begin
156+
results = SearchConfig.run_specialist_document_search(query_params)
157+
rescue BaseParameterParser::ParseError => e
158+
status 422
159+
return { error: e.error }.to_json
160+
end
161+
162+
headers["Access-Control-Allow-Origin"] = "*"
163+
results.to_json
164+
end
165+
end
166+
146167
# Return results for the GOV.UK site search
147168
#
148169
# For details, see docs/search-api.md

Diff for: lib/search/query_builder.rb

+14-1
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,26 @@ def query
6464
end
6565

6666
def filter
67+
return specialist_documents_post_filter if content_index_names.include?(SearchConfig.specialist_finder_index_name)
68+
6769
Search::FormatMigrator.new(
6870
search_params.search_config,
6971
base_query: QueryComponents::Filter.new(search_params).payload,
7072
).call
7173
end
7274

73-
private
75+
def specialist_documents_post_filter
76+
{ bool:
77+
{
78+
minimum_should_match: 1,
79+
should: [{
80+
bool: { must: QueryComponents::Filter.new(search_params).payload }
81+
}],
82+
},
83+
}
84+
end
85+
86+
private
7487

7588
attr_reader :content_index_names, :metasearch_index
7689

Diff for: lib/search_config.rb

+23-1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ def run_search(raw_parameters)
5252
search_params.search_config.run_search_with_params(search_params)
5353
end
5454

55+
def run_specialist_document_search(raw_parameters)
56+
search_params = parse_parameters(raw_parameters)
57+
search_params.search_config.run_specialist_document_search_with_params(search_params)
58+
end
59+
5560
def run_batch_search(searches)
5661
search_params = []
5762
searches.each do |search|
@@ -106,7 +111,7 @@ def search_server
106111
SearchConfig.index_names,
107112
SearchConfig.govuk_index_name,
108113
SearchConfig.content_index_names,
109-
self,
114+
self
110115
)
111116
end
112117

@@ -121,6 +126,10 @@ def run_search_with_params(search_params)
121126
searcher.run(search_params)
122127
end
123128

129+
def run_specialist_document_search_with_params(search_params)
130+
specialist_document_searcher.run(search_params)
131+
end
132+
124133
def run_batch_search_with_params(search_params)
125134
batch_searcher.run(search_params)
126135
end
@@ -149,6 +158,10 @@ def new_content_index
149158
@new_content_index ||= search_server.index_for_search([SearchConfig.govuk_index_name])
150159
end
151160

161+
def specialist_documents_content_index
162+
@specialist_documents_content_index ||= search_server.index_for_search(SearchConfig.content_index_names + [SearchConfig.specialist_finder_index_name])
163+
end
164+
152165
def base_uri
153166
cluster.uri
154167
end
@@ -177,6 +190,15 @@ def searcher
177190
)
178191
end
179192

193+
def specialist_document_searcher
194+
@specialist_document_searcher ||= Search::Query.new(
195+
content_index: specialist_documents_content_index,
196+
registries:,
197+
metasearch_index:,
198+
spelling_index:,
199+
)
200+
end
201+
180202
def batch_searcher
181203
@batch_searcher ||= Search::BatchQuery.new(
182204
content_index:,

Diff for: lib/search_server.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def initialize(base_uri, schema, index_names, govuk_index_name, content_index_na
1212
@govuk_index_name = govuk_index_name
1313
@content_index_names = content_index_names
1414
@search_config = search_config
15+
@specialist_finder_index_name = SearchConfig.specialist_finder_index_name
1516
end
1617

1718
def index_group(prefix)
@@ -52,7 +53,7 @@ def validate_index_name!(index_name)
5253

5354
def index_name_valid?(index_name)
5455
index_name.split(",").all? do |name|
55-
@index_names.include?(name) || @govuk_index_name == name
56+
@index_names.include?(name) || @govuk_index_name == name || @specialist_finder_index_name == name
5657
end
5758
end
5859
end

0 commit comments

Comments
 (0)