Skip to content

Commit 29b0c2f

Browse files
committed
WIP - Add new endpoint to query specialist-finder index
1 parent 41a0593 commit 29b0c2f

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)